public class InternTest {
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());
String str2 = new StringBuilder("ja").append("va").toString();
System.out.println(str2);
System.out.println(str2.intern());
System.out.println(str2==str2.intern());
}
}
如图,如果运行这段代码,控制台会打出什么呢?
第二个结果是false,明明一样的方式获取的字符串对比结果为什么会不一样呢?
是打开方式出问题了吗?我换个字符串再试试:
由此可见,并不是我打开方式有问题,但是为啥'java'就这么特殊呢?先看看intern()这个方法是啥意思
--引用自周志明老师的深入理解java虚拟机.
方法区和运行时常量池溢出
由于运行时常量池是方法区的一部分,因此这两个区域的溢出测试就放在一起进行。前面提到JDK 1.7开始逐步“去永久代”的事情,在此就以测试代码观察一下这件事对程序的实际影响。
String