1 package stringtest; 2 3 public class StringTest { 4 5 public static void main(String[] args) { 6 //s1在常量池中.编译器优化以后就确定了 7 String s1 = "abc"; 8 String s4 = "abc"; 9 //s2和s3在堆栈中,在编译时期不能确定,只能在运行期才创建实例 10 //并且s2和s3是两个不同的对象 11 String s2 = new String("abc"); 12 String s3 = new String("abc"); 13 14 //intern方法会在常量池中找到一个和s2的unicode值相同的字符串常量 15 //1.如果有,返回它的引用 16 //2.如果没有,则在常量池中增加一个Unicode等于s2的字符串并返回它的引用 17 String s5 = s2.intern(); 18 System.out.println(s5 == s1);//true 19 20 //“==”比的是引用 21 //equals比的是Unicode值 22 System.out.println(s1 == s2);//false 23 System.out.println(s1.equals(s2));//true 24 System.out.println(s2 == s3);//false 25 System.out.println(s2.equals(s3));//true 26 System.out.println(s1==s4);//true 27 28 } 29 30 }