String.intern()详解

String.intern()详解_第1张图片
image.png

由源码的注释可知intern方法返回的是这个字符串在常量池中的对象。

首先区分两种写法的不同

String str="abc";
String str=new ("abc");

第一种写法只会在常量池中生产一个abc字符串对象,第二种写法先在常量池中生成abc对象,然后在堆中生产一个内容一样的字符串对象,str引用指向的是堆中的对象。

但是intern在1.6和1.6以后的jdk有着不同的实现

先看1.6的
String.intern()详解_第2张图片
image.png

str字符串由str1和str2拼接生成,因此会在堆中生成一个对象,常量池里没有对应的字符串对象,intern的时候会在常量池里再生成一个,所以false

再看1.8的
String.intern()详解_第3张图片
image.png

在1.6以后的jdk版本中,调用intern方法如果常量池没有对应的字符串对象,不会生成一个新的,而是生成一个指向堆里字符串的引用存在常量池并返回,因此true

你可能感兴趣的:(String.intern()详解)