public class Test{
public static void main(String[] args)...{
String s1=new String("abc");
String s2="abc";//放入String池里
String s3=new String("abc");
System.out.println(s1==s2);//false
System.out.println(s1==s3);//false
System.out.println(s3==s2);//false
System.out.println(s1==s1.intern());//s1.intern()到String池里找,而s1是在堆中所以返回false
System.out.println(s2==s2.intern());//true
System.out.println(s1.intern()==s3.intern());//两个字符串同时到String里查找,返回true
//以下三个都放到String池
String hello="hello";
String hel="hel";
String lo="lo";
System.out.println(hello=="hel"+"lo");//字符串相加以后,会到String池里找,有不产生,所以返回true
System.out.println(hello=="hello");//直接到String池里找,返回true
System.out.println(hello=="hel"+lo);//字符串加一个引用,将产生一个新的对象,所以返回false
System.out.println(hello==(hel+lo));//类似上面,返回false
System.out.println(hello==(hel+lo).intern());//产生新的对象,但是有intern()方法,将到String池中找,返回true
}
}
那只是我的个人理解,看了一些资料,大家帮帮我找出错误或不一致的意见,请指出。上面那种理解,我比较清晰。