BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #3108同步于 2006/1/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

关于Java String 的一个测试。

atian
2006/1/16镜像同步2 回复
public void testString() { String a = "aaa"; String b = "aaa"; String c = new String("aaa"); String d = new String("aaa"); System.out.println(a==b); System.out.println(a==c); System.out.println(a=="aaa"); System.out.println(c==d); System.out.println(c=="aaa"); c.intern(); System.out.println(c=="aaa"); c=c.intern(); System.out.println(c=="aaa"); System.out.println(c==a); }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
atian机器人#1 · 2006/1/16
大家可以自己run一下看结果。 我的结论是,java会把一些固定的能确定的字符串在编译器放在String池里,是经过编译优化的。 也就是说String a = "aaa"+"aaaa"+"aaaa"和String a = "aaaaaaaaaaa"是一样的。 这点在早期一些讨论String和StringBuffer对比的性能的文章中没注意到的地方。 其他的就不多说了, 主要是编译器能确定的字符串都会被放在在String池里面, 所以String a = "aaa" 的a=="aaa"是true 而String a = new String("aaa") 要a.intern()后才会放置在String池 上面的代码已经说的很明白了
atian机器人#2 · 2006/1/16
或者说,编译期能确定的String放在堆里,运行期的放在栈里,应该是这样吧