讲一下

成盒落地98k 2016-06-13 11:45:44
讲下这个题
...全文
151 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱睡觉的阿狸 2016-06-13
  • 打赏
  • 举报
回复
第一行一个。 第二行的substring方法,你查看源码会发现,它会产生一个新的String对象。 第三行,String类的toString方法返回它本身,所以不产生新对象。 第四行,new StringBuffer(s1)是不产生新的String对象的,但是StringBuffer的toString方法会产生一个新的String对象,可参看源码。 所以,会产生三个String对象。
qq_21724667 2016-06-13
  • 打赏
  • 举报
回复
我的理解: String s1=“hello” 在栈中新增s1引用,此时堆中没有“hello”,所以在堆中新增字符串“hello”; String s2=s1.subString(2,3) 在栈中新增s2引用,同时算出subString(2,3)为“l”,此时堆中没有“l”,所以在堆中新增字符串“l”; String s3=s1.toString() 在栈中新增s3引用,同时算出s1.toString()为“hello”,此时堆中含有字符串“hello”,所以直接指向对中的字符串“hello”; String s4=new StringBuffer(s1).toString() 在栈中新增s4引用,StringBuffer(s1).toString()为“hello”,因为采用了new的方式,因此在堆中新增了字符串“hello”;
qq_21724667 2016-06-13
  • 打赏
  • 举报
回复
我的理解: String s1=“hello” 在栈中新增s1引用,此时堆中没有“hello”,所以在堆中新增字符串“hello”; String s2=s1.subString(2,3) 在栈中新增s2引用,同时算出subString(2,3)为“l”,此时堆中没有“l”,所以在堆中新增字符串“l”; String s3=s1.toString() 在栈中新增s3引用,同时算出s1.toString()为“hello”,此时堆中含有字符串“hello”,所以在堆中新增字符串“hello”; String s4=new StringBuffer(s1).toString() 在栈中新增s4引用,StringBuffer(s1).toString()为“hello”,因为采用了new的方式,因此在堆中新增了字符串“hello”;
  • 打赏
  • 举报
回复
翻翻以前的帖子,这种讲解很多的
  • 打赏
  • 举报
回复
http://www.blogjava.net/mirenxiaoxiao/archive/2010/10/18/335457.html

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧