面试题code
public class StringPool58Demo {
public static void main(String[] args) {
String str1 = new StringBuilder("58").append("tongcheng").toString();//58 tongcheng换成ali baba,zi jie,mei tuan,re dis 都是true
System.out.println(str1);
System.out.println(str1.intern());
System.out.println(str1 == str1.intern());
System.out.println();
String str2 = new StringBuilder("ja").append("va").toString();
System.out.println(str2);
System.out.println(str2.intern());
System.out.println(str2 == str2.intern());
}
}
讲解
intern()方法
- 源码+解释


why
- 按照代码结果,java字符串答案为false
- 必然是两个不同的java,那另外一个java字符串如何加载进来的?
- 为什么
- 有一个初始化的java字符串(JDK出娘胎自带的),在加载sun.misc.Version这个类的时候进入常量池
OpenJDK8底层源码说明
- 递推步骤
- System代码解析
- System
- initializeSystemClass
- Version

- 类加载器和rt.jar
- 根加载器提前部署加载rt.jar

- OpenJDK8源码
考查点
- intern()方法,判断true/false?
- 《深入理解Java虚拟机》书原题,是否读过经典JVM书籍
