总结:
1.==比较的是引用地址
2.equals()比较的是具体的字符串
3.intern()方法返回的是常量池中字符串的引用
String str1="abc";
String str2="def";
String str3="abc"+"def";
String str4="abcdef";
String str5=str1+"def";
String str6=str1+str2;
//==比较的是引用地址
System.out.println(str3==str4);//true,str3和str4都指向常量池
System.out.println(str4==str5);//false,str4指向常量池; str5指向堆。
System.out.println(str4==str6);//false,str4指向常量池; str6指向堆。
System.out.println(str5==str6);//false,str5和str6都指向堆,但是是在堆中不同的对象。
//equals比较的是具体的字符串值
System.out.println(str4.equals(str5));//false,str4指向常量池; str5指向堆。
System.out.println(str4.equals(str6));//false,str4指向常量池; str6指向堆。
System.out.println(str5.equals(str6));//false,str5和str6都指向堆,但是是在堆中不同的对象。
//intern()方法返回的是常量池中字符串的引用
System.out.println(str4==str5.intern());// true;都指向常量池中的"abcdef"
System.out.println(str4==str6.intern());// true;都指向常量池中的"abcdef"
System.out.println(str5.intern()==str6.intern());// true;都指向常量池中的"abcdef"