码迷,mamicode.com
首页 > 编程语言 > 详细

java String.intern 和 字符串常量池

时间:2020-11-06 02:16:41      阅读:20      评论:0      收藏:0      [点我收藏+]

标签:结果   int   作用   false   生成   gen   存在   地址   字符串常量   

 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 和 字符串常量池

标签:结果   int   作用   false   生成   gen   存在   地址   字符串常量   

原文地址:https://www.cnblogs.com/dint/p/13932165.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!