关于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 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做出了调整。
推荐阅读
- 过节■江苏省委省政府办公厅下发关于做好2021年元旦春节期间有关工作的通知
- |徐州市出台《关于优化创新创业生态系统 提升区域科技创新活力的实施意见》及实施细则
- 雨下|全球关于禁售燃油车只是理论上可行吗
- 关于用phpfsocket 写Post, 模拟http 报文怎样写入要传输的处理数据
- 封面新闻|耀出行:滴滴解决你代步的“温饱”问题,我来满足你出行的仪式感需求
- 智叔|很多家长还在整箱买:谈谈关于牛奶的17个真相警惕这些列入黑名单的“假牛奶”
- 关于微信小程序的思考:运营者该何去何从
- 关于人工智能虚拟人的一些问题
- 知乎上关于人生经验的介绍是否可能对青少年造成潜在危害
- 卫星云图中这种图像是啥情况
