黑马程序员技术交流社区

标题: 一共创建了多少个对象:String s = “a”+“b”+”c”+”d”; [打印本页]

作者: q953655369    时间: 2015-7-7 23:41
标题: 一共创建了多少个对象:String s = “a”+“b”+”c”+”d”;
一共创建了多少个对象:String s = “a”+“b”+”c”+”d”;
作者: RockLee    时间: 2015-7-8 16:11
一个对象
作者: RockLee    时间: 2015-7-8 16:16
我在这里敲段代码你就知道了。
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s2 == "ab");
System.out.println(s3 == "ab");
第一条语句打印的结果为false,第二条语句打印的结果为true,这说明javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。
作者: jake_liu    时间: 2015-7-8 16:27
我怎么觉得没有对象创建。。
作者: jake_liu    时间: 2015-7-8 16:28
我理解错了吗?堆内存中没有任何对象的创建
作者: 为明天而奋斗    时间: 2015-7-8 18:04
有创建对象吗
作者: 何鹏程    时间: 2015-7-8 18:47
new呢,这在字符串池子里的吧。
作者: 闫文强    时间: 2015-7-8 19:04
代码运转中,大家一起加油努力
作者: 357955778    时间: 2015-7-8 21:01
2楼解释好详细,学习了!
作者: e275919713    时间: 2015-7-8 21:07
2楼解释好详细,学习了!
作者: q953655369    时间: 2015-7-8 21:25
谢谢大家了     我看懂了
作者: 发抖的_DtYJA    时间: 2015-7-8 23:01
很经典的题目,学习!
作者: 思考。。。    时间: 2015-7-8 23:15
应该是一个对象,其中的加号作为连接符看,就相当于“abcd”,即String s = “abcd”;所以我觉得是一个对象。




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