黑马程序员技术交流社区

标题: 下面这条语句一共创建了多少个对象 [打印本页]

作者: 贾波    时间: 2013-11-28 12:48
标题: 下面这条语句一共创建了多少个对象
下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
作者: 匿名    时间: 2013-11-28 19:51
JDK1.5之后有自动装箱拆箱的新特性,这个我个人理解是
String s = new String("a")+new String("b")+new String("c")+new String("d");
应该是5个对象。个人理解。
作者: 小痞痞    时间: 2013-11-28 19:57
一共创建了七个对象
因为String是被final修饰的    所以不可更改
创建的对象是
a b c d ab abc abcd
作者: 菜不鸟    时间: 2013-11-28 20:50
个人认为是七个对象,“a”,“b”,“c”,“d”,“ab”,“abc”,“abcd”.因为String类是一个不可改变类,当内容一旦发生改变的时候都要产生一个新的对象。String的加法操作是顺序进行的,首先加法操作子是四个对象这个没什么疑问,每进行一次加法操作的时候都要生成一个对象,所以是七个对象。
作者: 低调的奢华    时间: 2013-11-29 15:01
一个String对象,对于常量编译时即完成计算,编译时就变成了
  1. String s="abcd";
复制代码

这是字面上的,指的是String对象只有一个。但是如果不是指String对象的话,就得看源码了。
关于String的原理,曾经看过一个帖子说过这个问题,好像需要创建三个对象。


作者: 低调的奢华    时间: 2013-11-29 15:09
本帖最后由 低调的奢华 于 2013-11-29 15:11 编辑

而像楼上说的
  1. String s = new String("a")+new String("b")+new String("c")+new String("d");
复制代码
这和
  1. String s="a"+"b"+"c"+"d";
复制代码
是有区别的
String s="a"+"b"+"c"+"d";这是常量是可以使用java的常量池技术的,而用new String()创建的字符串不是常量,不能在编译期就确定,所以new String()创建的字符串不能放入常量池中,他们有自己的地址空间。
这就牵扯到java常量池的概念,不懂的百度一下就知道了。






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