返回信息流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);
}
这是一条镜像帖。来源:北邮人论坛 / soft-design / #3108同步于 2006/1/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
关于Java String 的一个测试。
atian
2006/1/16镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
大家可以自己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池
上面的代码已经说的很明白了