问:String s="a"+"b"+"c"+"e" 总共创建了几个对象 ?
答案:1个
当我看到这个问题的时候,我的答案是错的,当我查阅资料后最终确认答案是1个。然后经过了大量的测试,最终答案是1个对象。
测试:
String s1="a";
String s2=s1+"b";
String s3="a"+"b";
System.out.println(s2=="ab");
System.out.println(s3=="ab");
第一条语句打印的结果为false,第二条语句打印的结果为true,这说明javac编译可以对字符串常量直接相加的表达式进行优化,不必要等到运行期再去进行加法运算处理,而是在编译时去掉其中的加号,直接将其编译成一个这些常量相连的结果。
题目中的第一行代码被编译器在编译时优化后,相当于直接定义了一个“abcd”的字符串&#x