public class StringDemo {
String s1 = "123";
String s2 = "12" + "3";
String ss1 = "12";
String ss2 = "3";
String ss3 = ss1 + ss2;
public void main() {
System.out.println(s1 == s2);//true
System.out.println(s1 == (ss1 + ss2));//false
System.out.println(s1 == ss3);//false
}
public static void main(String[] args) {
StringDemo sd = new StringDemo();
sd.main();
}
}
下面关于String的测试,哪位大神能给出解答?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
5条回答
threenewbee 2018-10-30 16:07关注java编译器有优化,String s2 = "12" + "3";,因为都是常量,所以s2可以在编译的时候算出是"123",而程序中字符串常量会放在常量池里,相同的常量只需要一个拷贝,所以s1 == s2
s1 == (ss1 + ss2),其中ss1+ss2是运行时候才计算,并不能放在常量表里。
ss3是一样的道理,它虽然理论上也可以被求值出来,但是java编译器并没有做那样深度的优化,两个变量(变量本身指向常量)的计算,还是运行时才计算的。本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报