面试题code
public class StringPool58Demo {
public static void main(String[] args) {
String str1 = new StringBuilder("58").append("tongcheng").toString();
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源码
- http://openjdk.java.net/
- openjdk8\jdk\srclshare\classes\sun\misc
总结
考查点
intern()方法,判断true/false?
《深入理解java虚拟机》书原题 是否读过经典JM书籍