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
请教各位大虾应选哪项?并帮我说明原因,小弟谢先了!

解决方案 »

  1.   

    3个两个new + 常量池中的 "hello"
      

  2.   

    C
    堆里new了两个对象,常量池一个"hello"对象
    s1,s2,s3,s4都是引用变量不是对象
      

  3.   

    按我理解,String s1=new String("hello"); 就创建了2个对象,而String s2=new String("hello"); 创建一个对象,String s3=s1和String s4=s2是引用创建对象,所以说3个对象。但也有人说是2个和4个。我还是不明白究竟是多少个
      

  4.   

    请教这位大虾,2个是如何理解呢?能否讲具体点。因为按我理解,String s1=new String("hello"); 就创建了2个对象,而String s2=new String("hello"); 创建一个对象,String s3=s1和String s4=s2是引用对象,所以说3个对象。
      

  5.   

    这道题是出之于孙卫琴的《JAVA面向对象编程》那本书,孙老师的答案是2个,但我理解是3个,搞晕了,大家出来帮帮忙,帮我解释下这道题
      

  6.   

    说2个是可以的,因为调用了两次new。"hello"这个常量对象一般是在类加载的时候创建的,所以不是题目中说的" 以下代码创建的"因此,了解一共会有3个String对象,以及它们各自创建时机即可。这种问题,出题的人有时候也不知道自己问的是什么。没有必要深入讨论这些东西了。
      

  7.   

    类加载的时候就是楼上所说的编译器吧?
    那么标准答案应该是:
    编译期常量池中创建了一个"hello"对象,
    运行期new了2个对象
    敢问臧大侠这么理解正确么?
      

  8.   

    Person p1 = new Person("tom");
    Person p2 = new Person("tom");
    Person p3 = p1;
    Person p4 = p2;
    如果是这样,应该容易理解为创建为2个对象。
    但String是个特殊的类,String s1 = new String("xyz")这样就创建了2个对象了,由于小弟是菜鸟,感到真的很困惑,还是不太理解String是个特殊的类,况且在各家ID公司面试经常出这样的题目
      

  9.   

    String s1 = new String("xyz");
    这个也容易理解,你看看调用的是String类的哪个构造方法就知道了。
    显然是这个:
    String(String original) 
              初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。也就是说参数就是一个String,问题解决。
      

  10.   

    第一句话会产生二个对象,一个是在常量池中,一个是在堆里new出来的
    第二句话会产生一个对象,就是new出来的,在常量池中已经存在“hello”对象了,所以不用创建了
    其他都是引用加起来一共三个
      

  11.   

    3个更多,参考:http://blog.csdn.net/gotohbu/archive/2009/09/02/4513211.aspx
      

  12.   

    三个,"hello"是放在对象池中的,而String s1=new String("hello"); String s2=new String("hello");分别又在堆里创建了两个对象!所以是三个! 
      

  13.   

    小菜一碟~ 3个啊   !主要理解字符串 机制 new了2个!!!!!!!!呵呵
      

  14.   

    看来没有定论!我的理解是两个!我是认识new!
      

  15.   

    3个  hello是常量字符串  java常量字符串会放在常量池中 而且相同的对象只会存在一个
    又new了s1和s2在堆空间中 所以是三个 s3和s4是引用而已
      

  16.   

    3个  hello是常量字符串  java常量字符串会放在常量池中 而且相同的对象只会存在一个
    又new了s1和s2在堆空间中 所以是三个 s3和s4是引用而已
      

  17.   

     局部变量都是放在栈里,new出来的对象在堆里面,应该说是2个
      

  18.   

    new出来的才是对象。所以是2个
      

  19.   

    2个,这儿只有new 才创建了新的对象,其它两个都是引用的前两个对象,
    为什么这么多回答3个的?
      

  20.   

    http://blog.csdn.net/ZangXT/archive/2009/05/19/4201979.aspx