黑马程序员技术交流社区

标题: String s="a"+"b"+"c"+"d"创建了几个对象 [打印本页]

作者: zhaodecang    时间: 2016-7-16 16:01
标题: String s="a"+"b"+"c"+"d"创建了几个对象
我看网上对这道题的说法有很多,没有一个一致的说法,现在又拿出来跟各位大神、学者以及老师们讨论一下:String s="a"+"b"+"c"+"d"创建了几个对象(假设之前串池是空的)
我个人觉得应该是7个:a”“b”“c”“d” “ab”“abc”“abcd”
作者: cat73    时间: 2016-7-16 16:19
本帖最后由 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
楼主知道常量优化机制么。如果不造,请百度一下。
作者: longforus    时间: 2016-7-16 17:28
cat73 发表于 2016-7-16 16:19
本回复仅针对 Oracle JavaSE 8u92,并没在其他 Java 版本测试过,因此实际结果可能不一致。

实际上这个题 ...

这个可以有,学习了,谢谢分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2