今天怀着好奇的心情对string这个类进行了又一次学习。
public class Test {
public static void main(String[] args){
String s = "12";
String s1 = "34";
String s2 = s+s1;
String s3 = "1234";
String s4 = "12"+"34";
String s5 = s+"34";
System.out.println(s2);
System.out.println(s2 == s3);
System.out.println(s2 == s4);
System.out.println(s3 == s4);
System.out.println(s3 == s5);
System.out.println(s2 == s5);
}
}
运行结果:
从代码可以看出s2,s3,s4,s5存放的内容都是字符串“1234”但是都得地址一样有的不一样。
在常量池中分别存放着3个字符串,分别由s,s1,s3指向它们的地址。
s4 = “12”+”34”编辑器会将其优化为“1234”然后在常量池里面找是否有字符串“1234”,如存在,就将s4指向“1234”所在的地址,所以s4与s3的地址是相同的。
s2=s+s1和s5 = s+”34”其实有点类似,s2=new StringBuffer(s).append(s1).toString(),s5=new StringBuffer(s).append(“34”).toString(),从上面可以看出s2和s5都开辟了新的内存空间来存放新的字符串“1234”,因此和s3的地址不同,s2和s5的地址也不相同。