package string;
public class StringInternMethodPractice1 {
public static void main(String[] args) {
StringBuilder stringBuilder2 = new StringBuilder("计算机软件");
String str2 = stringBuilder2.toString();
String str3 = str2.intern();
// 加载这个类的时候,Class文件中的常量池加载到运行时常量池,运行时常量池有”计算机软件“这个常量(以char数组的形式存在)
// 然后会在堆中生成一个字符串对象,字符串对象中的char数组指向运行时常量池中的”计算机软件“
// 最后在字符串常量池记录一下这个字符串对象的引用
// 调用str2.intern()方法时,会首先判断str2指向的字符串对象里的字符串是否首次出现在运行时常量池
// 这里非首次出现,所以会将字符串常量池中记录的引用返回给str3
// 虽然str3和str2指向的字符串对象都是在堆上,但是并非同一个对象,所以比较为false
System.out.println(str3 == str2);
}
}
图示解析
字符串常量池,运行时常量池,静态常量池.png
网友评论