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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我看网上对这道题的说法有很多,没有一个一致的说法,现在又拿出来跟各位大神、学者以及老师们讨论一下:String s="a"+"b"+"c"+"d"创建了几个对象(假设之前串池是空的)
我个人觉得应该是7个:a”“b”“c”“d” “ab”“abc”“abcd”

3 个回复

倒序浏览
cat73 黑马帝 2016-7-16 16:19:23
沙发
本帖最后由 cat73 于 2016-7-16 16:36 编辑

本回复仅针对 Oracle JavaSE 8u92,并没在其他 Java 版本测试过,因此实际结果可能不一致。

实际上这个题没法讨论。。。
Java 在这种字符串拼接的时候有隐式优化。。。
这种字符串拼接会自动替换为 StringBuilder (如果有不确定的东西时)。。。

但实际上,这句代码里所有的东西都是编译时就确定好的,因此答案 javap 一下就知道了。。
  1.     Code:
  2.        // String s="a"+"b"+"c"+"d";
  3.        0: ldc           #2                  // String abcd
  4.        2: astore_1
复制代码
答案是 0 个对象。。。
ldc。。。
直接读的常量池。。。

回复 使用道具 举报
qinxuezilu1314 来自手机 中级黑马 2016-7-16 17:19:52
藤椅
楼主知道常量优化机制么。如果不造,请百度一下。
回复 使用道具 举报
cat73 发表于 2016-7-16 16:19
本回复仅针对 Oracle JavaSE 8u92,并没在其他 Java 版本测试过,因此实际结果可能不一致。

实际上这个题 ...

这个可以有,学习了,谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马