public class StringTest {
public static void main(String[] args){
String s1="abc";
String s2="abc";
String s3=new String("abc");
System.out.println("s1==s2: "+(s1==s2));
System.out.println("s1==s3: "+(s1==s3));
}
}
对于直接创建的字符串,会检查constant pool中是否存在,如果有,直接指向它
String s1="hello";
String s2=new String("hello");
System.out.println("s1==s2: "+(s1==s2));
System.out.println("s1.equal(s2): "+(s1.equals(s2)));
s2=s2.intern();
System.out.println("s1==s2: "+(s1==s2));
/*用new 创建的则原因在于 intern 这个方法返回的是 返回字符串对象的规范化表示形式,
当调用 intern 方法时,如果池已经包含一个等于此 String 对象的字符串(该对象由 equals(Object) 方法确定),
则返回池中的字符串。否则,将此 String 对象添加到池中,并且返回此 String 对象的引用。*/