网上搜到的这个问题的答案都是说创建了两个String Object 。
我要纠正:String s = new String("xyz");创建了3个String Object!!
第一个对象 字符串 xyz 在 new之前已经被分配了一块内存,。 
第二个对象 new了一个对象
第三个对象 s
不懂看这个  Cat c = new Cat() 这个很清楚 是两个对象吧。

解决方案 »

  1.   

    new出来的那个不就是赋给变量s了么?
      

  2.   

    String s = new String("xyz");
    可以说String s = NULL;
    s不就是一个String对象了么。 
      

  3.   

     new 就开辟一块,s一块 xyz是一块。
      

  4.   

    楼主去搜搜java版里关于string的讨论贴吧。很经典的。
      

  5.   

    要是以分配内存为创建对象根据那就不是三个吧!!很多公司还傻乎乎的以这个为笔试题。彻底晕倒。它还继承了Object,首先调用了Object的默认构造方法。-------------------------------------------------
    其实就一个!!因为java认为一个hash值就代表了一个对象类型@XXXX-----------这就是一个对象。很多人还在以-引用,堆,栈,其实那只是对象数据的一部分。 new String("xyz") 你认为xyz有hash值么?------------------------------------------------------
    但是笔试的时候你别写一个,我可都是瞎忽悠!!哇哈哈!!
      

  6.   

    那又怎样?这个引用s从一生下来就被赋给了新创建的String对象,跟NULL有什么关系?
    另外,变量名跟对象是两码事,变量名不一定引用真正的对象。比如NULL引用。
      

  7.   

    第一个对象 字符串 xyz 在 new之前已经被分配了一块内存,。 
    怎么能说分配内存了 就是是对象啊
    xyz不过是给String类的构造方法 public String(String name){} 传的值而已第二个对象 new了一个对象
    这个是对的 只有这么一个对象 在堆中分配的内存 不过编译器并不知道应该确切的分配多大的内存空间第三个对象 s 
    s 是对象的引用 不是对象 是存储在栈内存中的 编译时编译器是需要知道要分配多大的内存空间的
      

  8.   

    String s =new String("abc");
    是2个对象吧  先是abc 产生一个匿名对象  就是没有引用指向这个对象(堆空间)其实是个垃圾空间
                 然后通过new 产生一个对象   在堆内存分配空间 ,这个空间是上面空间的一个副本  通过=(赋值)把这空间的地址赋给引用s
      
    不知道这样理解对不对    请高手再详解
      

  9.   

    那你也承认S是一个String对象了?
      

  10.   

    我的意思是 xyz本身就是一个String对象 
    s也是一个String对象
    new又是一个String对象。
      

  11.   

    正确答案:两个 String Object
    第1个:"xyz"
    第2个:
     new String("xyz") 
      

  12.   

    只有2个
    String s = NULL;
    s并没有成为一个对象,只是一个变量名而已。
    简单说,s不成为一个对象的原因是s在现在不能进行只有String对象才能进行的操作。
    如果你要执行类似于s.contains("1");
    这样的语句,就会返回java.lang.NullPointerException
    注意,是NullPointerException,不是NullObjectException
    现在懂了不?
      

  13.   


    呵呵,在 s 中存放的只是 String 对象的首地址,s 只是一个对象引用。
      

  14.   

    从新翻了2本j2se基础篇
    书上明确再介绍String 类的时候 说明了 变量名和对象的区别
    我就奇怪这个笨蛋 怎么还这么较真 怎么看的书 怎么学的习 还无视楼上诸多告诫你的人 !
    变量名存对象的引用 变量就叫变量 对象就叫对象
    我的天啊 斑竹删了这个帖吧
    有句话说的好 -------------对牛弹琴
    楼下再回复此帖的人 会被默认为也是牛!
    我再说一句
    请发此贴的牛 有本事 就去面试公司 和面试你的人探讨你的问题
    不用多说别的 把你的帖子给人家看下
    尤其让人家看你的最后一句话
    “不懂看这个  Cat c = new Cat() 这个很清楚 是两个对象吧。”
    保证直接把你扫地出门!
    连j2se基础的基础都不懂的牛 哪家公司敢要?
    蒙牛集团估计可以考虑下
    不好意思 我是看了这么多你对回复者的评论 实在是忍无可忍了
    把别人的好心提示 你却这么回复 !
      

  15.   

    这两天在上课,不好意思。我其实也是想把问题弄清楚,谢谢你的批评。不过我还是会搞清楚的,我手边有本Think in Java 上面String类介绍的不全面,只是晓得String是个非常特殊的类。通过这个问题的讨论 我觉得我对String 有了更加深刻的认识。。
    Cat c = new Cat()
    那这个c是什么 也是对象的引用?
      

  16.   

    什么是有了更深的认识 学java就是举一反三 那么多类 书本要挨个教吗?当然不用,也不可能
    你既然对String 有了更深的认识
    那你问的Cat c = new Cat() 
    那这个c是什么 也是对象的引用?
    这还用问吗 举一反三啊 难道楼主明白String不明白Cat?
    再不成Cat 明白了 Dog d = new Dog()就不明白了? 
      

  17.   

    什么是对象,它代表什么,和引用有什么区别。
    说吧,对象就是你一块内存空间,引用就是这个空间的名字。网上搜到的这个问题的答案都是说创建了两个String Object 。
    我要纠正:String s = new String("xyz");创建了3个String Object!!
    第一个对象 字符串 xyz 在 new之前已经被分配了一块内存,。
    第二个对象 new了一个对象
    第三个对象 s 
    s显然不是对象。
      

  18.   

    最明显的一个例子:你可以这么认为:在这个例子中,s是一个碗的编号,xyz是这个碗的模版,而你new出来的是做出来的碗.