1、以下代码共创建了几个对象?
String s1=new String("hello");
String s2=new String("hello");
String s3=s1;
String s4=s2;
a) 1 b) 2 c) 3 d) 4
请教各位大虾应选哪项?并帮我说明原因,小弟谢先了!
String s1=new String("hello");
String s2=new String("hello");
String s3=s1;
String s4=s2;
a) 1 b) 2 c) 3 d) 4
请教各位大虾应选哪项?并帮我说明原因,小弟谢先了!
堆里new了两个对象,常量池一个"hello"对象
s1,s2,s3,s4都是引用变量不是对象
那么标准答案应该是:
编译期常量池中创建了一个"hello"对象,
运行期new了2个对象
敢问臧大侠这么理解正确么?
Person p2 = new Person("tom");
Person p3 = p1;
Person p4 = p2;
如果是这样,应该容易理解为创建为2个对象。
但String是个特殊的类,String s1 = new String("xyz")这样就创建了2个对象了,由于小弟是菜鸟,感到真的很困惑,还是不太理解String是个特殊的类,况且在各家ID公司面试经常出这样的题目
这个也容易理解,你看看调用的是String类的哪个构造方法就知道了。
显然是这个:
String(String original)
初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。也就是说参数就是一个String,问题解决。
第二句话会产生一个对象,就是new出来的,在常量池中已经存在“hello”对象了,所以不用创建了
其他都是引用加起来一共三个
又new了s1和s2在堆空间中 所以是三个 s3和s4是引用而已
又new了s1和s2在堆空间中 所以是三个 s3和s4是引用而已
为什么这么多回答3个的?