第1个回答 2019-02-03
其实楼上的意思都对,但答案并不对.其实正确答案是4个,并不是3个.
首先第一步
String
s1
=
"1234";时在字符串池中创建了一个1234的对象,指向s1;//这里创建了一个对象
第二步
String
s2
="1234";是先到字符串池中去找,池中有一个1234的对象,直接指向s2;//这里用的是已经有的对象所以并没有重新创建对象,目前还是创建一个对象
第三部
String
s3
=
new
String
("5678");这里创建了两个对象,千万别想错了,是两个,不是1个,首先在字符串池中创建一个5687的对象,之后再队内存中创建一个String对象,再把5678对象赋值给String对象//这里是两个对像,楼上的全错了不要被误导.
public
String(String
original)
{
this.value
=
original.value;
this.hash
=
original.hash;
}
这是String带参数的构造方法,需要传一个String对象进行值和hashcode的复制,所以是两个
第四部
String
s4
=
new
String
("5678");到字符串池中找,存在5678对象,再在堆中创建一个新的String对象再把5678复制给新的String对象//由于字符串池中有5678不需要在创建新的了,所以这里只创建了一个对象
综上所述,第一步创建了一个对象,第二步没创建对象,第三部创建了两个对象,第四步创建了一个对象
1+0+2+1=4;所以总共创建了4个对象,请楼主明察