返回信息流之前了看了不少关于字符串常量池的帖子了,也略微了解了些,后来在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]
这是一条镜像帖。来源:北邮人论坛 / java / #51014同步于 2016/6/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
常量池和StringBuilder的问题
Lamperouge
2016/6/15镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
明白了~~ 谨遵教诲
【 在 nuanyangyang 的大作中提到: 】
: 不要试图去搞清楚这个问题。JVM可以对这个进行极大幅度的优化。不要试图用==判断字符串是否相等。