String类的intern()方法
intern()方法
介绍
String类中定义了intern()方法,该方法的用途是为每一个字符序列生成一个且仅生成一个String的引用。intern()方法设计的初衷,就是重用String对象,以节省内存消耗。
作用
intern()方法的作用在jdk1.7之后是查看常量池中是否存在和调用方法的字符串内容一样的字符串,如果有的话,就返回该常量池中的字符串,若没有的话,就在常量池中写入一个堆中该字符串对象的一个引用,指向堆中的该对象,并返回该引用。
举例
案例1
static void AAA() {
String a = new String("abc");
String b = new String("abc");
System.out.println("a.intern() == b.intern() " + (a.intern() == b.intern()));// true
System.out.println("a.intern() == b " + (a.intern() == b));// false
System.out.println("a.intern() == a " + (a.intern() == a));// false
System.out.println("a == b " + (a == b));// false
}
运行结果
分析
a对象创建是是会创建两个对象一个是堆中string对象,另一个是常量池中abc对象,而b对象创建时只是创建堆中string对象,并且a与b不是同一个对象。
案例2
static void AAA() {
String a = new String("abc");
String b = new String("abc");
System.out.println("a.intern() == b.intern() " + (a.intern() == b.intern()));// true
System.out.println("a.intern() == b " + (a.intern() == b));// false
System.out.println("a.intern() == a " + (a.intern() == a));// false
System.out.println("a == b " + (a == b));// false
System.out.println("=============================================");
String str1 = "abc";
System.out.println("a.intern() == str1 " + (a.intern() == str1));// true
System.out.println("b.intern() == str1 " + (b.intern() == str1));// true
System.out.println("a == str1 " + (a == str1));// false
System.out.println("str1 == abc " + (str1 == "abc"));// true
}
运行结果
分析
新声明的对象所获得值时来自于常量池