看下面两段代码:
String s1 = "123" + "456";
String s2 = s1.intern();
System.out.println(s1 == s2);
String s3 = "123" + "456";
String s4 = "123456";
s3 = s3.intern();
System.out.println(s3 == s4);
输出分别是:true true
s1.intern() :首先判断字符串常量池中是否存在该常量字符串,存在则直接返回常量池中的引用;不存在则将自身引用放进常量池,返回。
注意:上诉是处于jdk1.8环境下,如果是jdk1.7则不会将自身引用放进常量池,而是重新创建一个String