String s = "a" + "b" + "c" + "d" + "e";
此句代码从头至尾共创建了几个对象,
在其他论坛看到的这个帖子,众说纷纭啊,我等菜鸟被彻底搞迷糊了,还是来CSDN鉴定清楚
下面是那个帖子里的2个说发:
1。就创建了一个
String s = "a" + "b" + "c" + "d" + "e";
赋值符号右边的"a"、"b"、"c"、"d"、"e"都是常量
对于常量,编译时就直接存储它们的字面值而不是它们的引用
在编译时就直接讲它们连接的结果提取出来变成了"abcde"
该语句在class文件中就相当于String s = "abcde"
然后当JVM执行到这一句的时候, 就在String pool里找
如果没有这个字符串,就会产生一个
2.9个对象
分析如下:
String s只是一个对右边对象的引用不是对象,它引用的是右边表达式最后形成的对象,即"abcd"
再看右边 首先明确一点
String str=”aaa“;
上边的语句产生了一个对象
即右边是以双引号形式产生了一个String对象 此种形式的对象被存储在字符串池当中
题中右边的试子是以一下顺序来创建对象的
"a" 查找字符串池里没有与此字符串equal的字符串对象(注意是equal不是==)于是创建对象"a"
接着 "b" 同上 也在字符串池里创建对象"b"
接着 "a"+"b" 即 "ab" 同样 在字符串池里找不到equal的对象于是创建字符串池中对象"ab"
以此类推 产生9个对象 都存储在字符串池当中 分别是
"a"
"b"
"ab"
"c"
"abc"
"d"
"abcd"
"e"
"abcde"
个人比较倾向于第二个回答