每次都做的晕晕乎乎的字符串题:下面这条语句一共创建了多少个对象: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学聪明了,在编译时就能确定的变量,编译后会直接替换成最终结果。