本帖最后由 Aron 于 2014-6-22 15:14 编辑
大家大部分人都知道对于一个String s = new String("abc");这样一句语句实际上是创建了两个对象
我的理解是因为当new 这个对象时调用了String里面相对应的构造方法而这个构造方法里面是接受了一个String的对象,这里会创建一个对象,然后在 new String()会创建一个对象,这个新建的对象是“abc”的副本,只是值和它一样
我是想说因为String是不可变的,当使用引号包含文本的方式创建的String对象之间使用“+”连接产生的新对象才会被加入字符串池中。对于所有包含new方式新建对象(包括null)的“+”连接表达式,它所产生的新对象都不会被加入字符串池中
所以虽然new String("abc")但是在缓冲池中还是有了一个abc
所以 String s1 = new String();
s1="abc";
String s2="abc";
System.out.println(s1==s2);
结果是true
而 String s1 = new String("abc");
String s2="abc";
System.out.println(s1==s2);
结果是false
我理解对不对啊? |