美文网首页Java 虚拟机
理解java中String类的intern()方法

理解java中String类的intern()方法

作者: 水石间 | 来源:发表于2018-12-15 11:59 被阅读0次
  1. 在1.6及以前的JDK中,常量池是放在方法区的(非堆),(被字符串实例调用的)intern()方法会在调用时先去常量池中查看是否有相同的字符串(equals()),如果有那就返回常量的引用,如果没有就复制字符串实例放到常量区,然后再返回对常量的引用。


    jdk6canstantpool.jpg
    jdk6.jpg
  2. 在1.7及以后的JDK中,常量池从方法区挪到了堆区,(被字符串实例调用的)intern()方法会在调用时先去常量池中查看是否有相同的字符串(equals()),如果有那就返回常量的引用,如果没有也不会复制字符串实例放到常量区,而是复制堆上的该字符串实例的引用到常量区, 然后再返回常量区的对应引用。 jdk7constant pool.jpg

练习:

String str1 = new String("Hello")+ new String("World");    
System.out.println(str1.intern() == str1); 
System.out.println(str1 == "HelloWorld"); 

jdk1.6及以前版本为false false,
jdk1.7及以后版本为true ture。

String str2 = "HelloWorld";//新加的一行代码,其余不变
String str1 = new String("Hello")+ new String("World");    
System.out.println(str1.intern() == str1); 
System.out.println(str1 == "HelloWorld"); 

jdk1.6及以前版本为false false,
jdk1.7及以后版本为false false。

参考并感谢:
String中intern方法的作用
你真的了解String类的intern()方法吗

相关文章

网友评论

    本文标题:理解java中String类的intern()方法

    本文链接:https://www.haomeiwen.com/subject/pcoohqtx.html