java String.intern 和 字符串常量池

Posted dint的技术博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java String.intern 和 字符串常量池相关的知识,希望对你有一定的参考价值。

 String.intern()   的作用是把字符串放入常量池

如果字符串存在于常量池,直接返回地址即可

如果字符串不在常量池:

   在jdk7 以下版本是先把字符串复制到常量池区然后返回字符串在该区的地址

  在jdk7及以上版本中则是直接把字符串的地址复制到常量池

 

 之所以要这么做原因是  jdk7及以后的版本  把PermGen区放在了普通堆中,而常量池在PermGen区

 

所以

   String  a="i love ";

   String b=a+"U";

   b.intern()==b; //在jdk7 以下版本结果是 false   在jdk7及以上版本结果是 true

 

关于字符串在常量池的情况:

   String a="123" ;//字符串直接存在了常量池 a是指向了常量池地址

   String b=a+"456";//字符串动态生成的 变量  不在常量池 

   final String c="123-";

   String d=c+"4567";// 字符串直接存在了常量池  d是直接指向了常量池的地址

 

 

常量池里有 "123"     "456"    "1231"    "4567"   "123-4567"   

 

以上是关于java String.intern 和 字符串常量池的主要内容,如果未能解决你的问题,请参考以下文章

字符串常量池和String::intern()的讨论

字符串常量池和String::intern()的讨论

常量池之字符串常量池String.intern()

再议String-字符串常量池与String.intern()

String.intern

Java--深入理解字符串的String#intern()方法奥妙之处