日期:2014-05-20  浏览次数:20697 次

每次都做的晕晕乎乎的字符串题:下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";

------解决方案--------------------
String s="a"+"b"+"c"+"d";

我只是猜测
s 是一个
“a” “b” “c” “d” 各一个 
“abcd” 是一个
也就是6个 
------解决方案--------------------
这条语句被编译后会最终会变成String s=“abcd”,执行这条语句jvm会去字符串池里面找,如果找不到就会在字符串池里创建一个
------解决方案--------------------
这种扯谈的题,一再出现。唉。
这个String数量跟JVM 相关。
不同版本的JVM实现,数量会不一样的。
------解决方案--------------------
可以说是两个,一个在栈里面,一个在堆里面。
------解决方案--------------------
这个问题,你只要回答“取决于编译器”,面试官一定会大为赏识将你录取
------解决方案--------------------
月经帖

String s="a"+"b"+"c"+"d"; 
编译后的代码为:
String s=new StringBuilder("a").append("b").append("c").append("d").toString()

拥有常量String类匿名对象"a"、"b"、"c"、"d"四个
拥有变量String类对象s和变量StringBuilder类匿名对象,共计2个
------解决方案--------------------
只创建了一个对象,因为虚拟机会在编译期间对字符串进行去加号优化,而不是在运行期进行加法运算把字符串连接起来,所以最终只创建了一个对象abcd
------解决方案--------------------
两个,麽的其他的,只有常量池中的'abcd' 和内存中的new String (abcd)对象
------解决方案--------------------
这题都做烂了,换道把。
网上一搜太多了。
最经典的那个解释就是本论坛 老紫竹  写的。。。
------解决方案--------------------
管他几个,知道那么回事就可以了,没事闲的慌
------解决方案--------------------
11楼说的对
------解决方案--------------------
编译后为String s = "abcd"    现在jvm学聪明了,在编译时就能确定的变量,编译后会直接替换成最终结果。