A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 鸭梨的生活   /  2014-5-18 21:01  /  3246 人查看  /  24 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String类的定义就知道,只要被双引号括起来的部分那就是一个String类的实例对象!因此确实在内存常量池中的字符串池中存在7个对象,只是说类型型变量s仅仅指向了一个对象"abcd"而已。

至于说,20楼提到的垃圾回收的问题,我就不太清楚了,但我感觉常量池里的对象应该不会被垃圾回收。。。
回复 使用道具 举报
本帖最后由 ↘ふ紫铯幽夢 于 2014-5-25 15:34 编辑

   //这是我的分析,请看注释


  1. String s1="a"+"b"+"c";
  2. String s2="a"+("b"+"c");//如果按照会创建多个对象来理解,该行代码会先创建b+c的对象再和c想加返回一个全新的对象,按照这个逻辑推断s1==s2应该返回false,但实际返回true。与会创建多个对象相违背。 String s1="a"+"b"+"c";因此我认为 String s1="a"+"b"+"c"该行代码只会创建一个对象。
  3. System.out.println(s1==s2);//返回了true
复制代码
回复 使用道具 举报
看了评论 我已然不知道到底是几个了~
回复 使用道具 举报
只创建一个对象,在常量池中
回复 使用道具 举报
liang090214 发表于 2014-5-18 22:41
String s = “a”+”b”+”c”; //创建了5个对象
String s = “a”+”b”+”c”+”d”; //创建了7个对象
St ...

好棒!!!!!!!
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马