关于Java中String字符串地址值的比较。
先说结论:
1.常量与常量拼接的结果在常量池,且常量池不会存在相同内容的常量。
2.只要其中有一个变量,结果就在堆中。
3.如果拼接的结果调用intern方法,返回值就在常量池。
所以以下代码的结果就一目了然了。
String s = "abc123";
String s1 = "abc";
String s2 = "123";
String s3 = "abc" + "123";
String s4 = s1 + "123";
String s5 = "abc" + s2;
String s6 = s1 + s2;
String s7 = s6.intern();
System.out.println(s == s3);//true
System.out.println(s == s4);//false
System.out.println(s4 == s3);//false
System.out.println(s5 == s3);//false
System.out.println(s6 == s);//false
System.out.println(s7 == s);//true