String s = new String("xyz");创建了几个String Object? 答案是两个
,怎么理解啊,我的理解是new了一个空间(堆内存),把xyz放到堆内存中的,然后s是指向后面的一个引用,怎么题上是两个啊。怎么理解啊?

解决方案 »

  1.   

    创建了2个对象,1个是字符串类型的"xyz"对象,另1个是字符串类型的对象s,它指象对象"xyz". new需要申请新的空间,所以又有一个.
      

  2.   

    s不是存放在栈里面的一个引用么,它指向堆里的对象'XYZ',s本身又不是存放在堆里的,怎么会是对象呢?
      

  3.   

    2个  这问题在csdn回答很多次了
      

  4.   

    当然是两个了,先在String pool中创建了一个,如果在堆内存中也创建了一个。然后把堆中的引用赋给s.
      

  5.   

    String pool到底是个什么东西啊?是不是就是栈?堆中的应该是对象吧,不是引用吧..
      

  6.   

    String   s   =   new   String("xyz");
    和String   s   =   "xyz";是不一样滴,前者是2个,后者是1个
    所以尽量用后者哈
      

  7.   

    见帖子http://topic.csdn.net/u/20071214/14/17ccdb98-7424-45ad-a1d0-87e78143990d.html讨论的很火不用新开帖子了 呵呵
      

  8.   

    顶 15 楼
    的 和我的想法是一样的
    但是一般都用 String s = "xyz"; 呵呵
      

  9.   

    答案可以是两个也可以是三个,两个的就不说了,对三个的做下解释,一个是"xyz"也可以算是一个字符串对象,加上以前的两个不就是三个了么?
      

  10.   

    我是这样理解的:String s=new String("xyz");"xyz"在这条语句中虽然只是一个参数,但是它本身就是一个匿名的String对象,在堆内存中就会有一个匿名的String对象。new String("xyz")等于执行了String的构造函数String(String original),它就会初始化一个新创建的 String 对象,表示一个与该参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的一个副本。所以是有两个对象。