String.intern() 方法有什么作用?

1,934 total views, 9 views today

String.intern() 方法可以使得所有含相同内容的字符串都共享同一个内存对象。

JVM 中,存在一个字符串常量池,字符串的值都存放在这个池中。当调用 intern 方法时,如果字符串常量池中已经存在该字符串,那么返回池中的字符串;否则将此字符串添加到字符串常量池中,并返回字符串的引用。

 

JDK1.6 和 JDK1.7 在 intern() 方法的实现上,有相同,也有不同。

相同点:
先去查看字符串常量池是否有该字符串,如果有,则返回字符串常量池中的引用。
不同点:
如果是 JDK1.7,当字符串常量池中找不到对应的字符串时,不会将字符串拷贝到字符串常量池,而只是生成一个对该字符串的引用在字符串常量池。而 JDK1.6 会拷贝字符串至字符串常量池。

 

JDK1.6 中,常量池在方法区。JDK1.7 中,常量池移到堆区了。

注意:字符串常量池中的 String 对象,也是可以被 GC 回收的,只要它不再被引用了。

String.intern 方法可以减少内存中相同字符串的数量,节省一些内存空间。

原创文章,转载请注明出处!http://www.javathings.top/string-intern方法有什么作用?/

About: wusq


发表评论

邮箱地址不会被公开。 必填项已用*标注