String s = new String("abc");
此种方法的实例化产生的是两个对象。
1、"abc"字符串就是一个String类的匿名对象。
2、new一个也产生了一个对象。
如果是通过String s="abc"定义一个变量的话,再声明一个变量String ss="abc",
每次定义一个相同内容的字符串时都只会共享一个空间,也就是在堆内存中只会存在一个对象。
如果是通过new String("abc")产生对象的话,一个字符串就是一个String类的匿名对象,有了字符串"abc",
其实就已经存在了一个对象了,然后又通过new关键字实例化,就会又产生一个对象,
这样原来的那个匿名对象就会成为垃圾,而是用new关键字实例化产生的对象。
所以只产生了两个对象。 |