public class InternDemo { public static void main(String[] args){ /* jdk7版本之后 字符串常量池从Perm Space移到Java Heap */ //生成两个对象 String s1 = new String("aaa"); //直接使用双引号声明出来的String对象会直接存储在常量池 String s2 = "aaa"; //非双引号声明的string对象,可以使用intern方法,若字符串存在,使用查询的字符串,若不存在将当前字符串放入常量池 s1.intern(); //比较堆内存地址 System.out.println(s1.equals(s2)); //比较引用地址 System.out.println(s1 == s2); //equals相等,hashcode一定相等 System.out.println(s1.hashCode() == s2.hashCode()); //生成两个对象 String s3 = new String("1") + new String("1"); String s4 = "11"; s3.intern(); System.out.println(s3.equals(s4)); System.out.println(s3 == s4); System.out.println(s3.hashCode() == s4.hashCode()); /* true false true */ } }