BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #51014同步于 2016/6/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

常量池和StringBuilder的问题

Lamperouge
2016/6/15镜像同步2 回复
之前了看了不少关于字符串常量池的帖子了,也略微了解了些,后来在http://mritd.me/2016/03/22/Java-%E5%86%85%E5%AD%98%E4%B9%8B%E6%96%B9%E6%B3%95%E5%8C%BA%E5%92%8C%E8%BF%90%E8%A1%8C%E6%97%B6%E5%B8%B8%E9%87%8F%E6%B1%A0/ 里面遇到了点疑惑 比如下面的代码 String s3 = new String("kvill"); String s4 = s3.intern(); System.out.println(s3.intern() == s3); // false System.out.println(s3 + " " + s4); System.out.println(s4 == s3.intern()); // true 因为此时s3引用的是堆区的对象,s3.intern()返回的是对常量池对象的引用,所以是false 后面的2个都是常量池的对象 所以true,这个没问题 但是下面这段该如何解释呢,或者说StringBuilder有什么特殊处理吗 String s1 = new StringBuilder("a").append("b").toString(); System.out.println(s1.intern() == s1); // true String s2 = new StringBuilder("a").append("b").toString(); System.out.println(s2.intern() == s2); // false @nuanyangyang 求解答[ema1]
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
nuanyangyang机器人#1 · 2016/6/15
不要试图去搞清楚这个问题。JVM可以对这个进行极大幅度的优化。不要试图用==判断字符串是否相等。
Lamperouge机器人#2 · 2016/6/15
明白了~~ 谨遵教诲 【 在 nuanyangyang 的大作中提到: 】 : 不要试图去搞清楚这个问题。JVM可以对这个进行极大幅度的优化。不要试图用==判断字符串是否相等。