关于String.intern()( 二 )

jvm初始化就会建立一个hashtable,叫StringTable,可以参考java的hashmap。
■网友
楼主可以参考 http://tech.meituan.com/in_depth_understanding_string_intern.html JDK6和JDK7中intern是有区别的。
■网友
这跟jdk版本有关系,jdk6会返回false,而jdk7会返回true,原因是jdk7把常量池从永久代迁到了heap中,而且常量池中保存的是首次出现常量的引用,而不是像jdk6是复制一份放到永久带
■网友
至于"az"那个例子为什么返回 false
关于String.intern()


■网友
String s1 = new StringBuilder("why").append("true").toString();首先,对于如上代码,"why" "true"已经在字符串池中(java7之后在tenured area)了,但是”whytrue“并不在(在eden area)。
然后,题主相当于执行了
String s2 = s1.intern();System.out.println(s1 == s2);在s1.intern()的执行时:jvm发现字符串池中没有”whytrue“,所以他就提升s1所指对象到tenured area,将那个对象放进了字符串池,然后返回了引用。
比较绕人的地方就是,s1.intern()是直接影响了s1所指的对象,而不是重新复制了对象。
关于String#intern的博客: http://tonyz93.blogspot.com/2017/02/string-intern.html
欢迎关注:
zzt93 (Tony Zeng)
http://tonyz93.blogspot.com
【关于String.intern()】 http://stackoverflow.com/users/2870532/tony

■网友
这个我记得深入理解jvm中有介绍,在JDK7做出了调整。


推荐阅读