黑马程序员技术交流社区
标题:
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 一下就知道了。。
Code:
// String s="a"+"b"+"c"+"d";
0: ldc #2 // String abcd
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