String s = new String("xyz");创建了几个String Object?  解释原因

解决方案 »

  1.   

    String有个String pool , 如果用String s="xyz",String y= "xyz",就有"xyz"一个object,s和y指向这个对象。如果String s=new String("xyz"),String y=new String("xyz"),就有2个"xyz"的object,s和y分别指向他们。
    所以一般不推荐new String ("")
      

  2.   

    讨厌这种题目,把java内存机制弄明白就行了
      

  3.   


    2个,分析:
    首先new String(“xyz”)就创建了一个String object对象;
    接着创建的的该String Object对象赋给 String  类型的 s 对象,所以就创建了2个,
      

  4.   


    Person p=new Person();创建了几个Person对象?
      

  5.   

    首先应当理解,一个字符串就是一个String的匿名对象(下边的例子可以验证)
    例:
    public class Demo{
        public static void main(String args[]){
           String s="xyz";       //声明String类型变量s
           System.out.println("xyz".equals(s));  //equals()为String类中比较字符串内容的方法
        }
    }
    也就是说见到有引号""包围的字符串时就创建了一个匿名对象。
    而new操作符又是用来创建对象的,所以见到new("xyz")时又创建了一个String类型的对象。
    所以是两个Object
    不过建议LZ不要使用此种方式创建String类的对象,因为此方法创建之后,其中一个对象会变成垃圾,消耗内存。
      

  6.   

    这也赞同。。不要欺骗lz好吗
    “xyz”这个字常量符串会在字符串常量池中被创建,而又new了一个字符串s 所以是两个。
      

  7.   

    我也有点晕,这个new出来的"xyz",
    到底是在data segment中,
    还是在heap中呢?按照马士兵的说法,new出来的东西都在heap中,而字符串常量又应该在data segment中。
      

  8.   


      哥们,这个不能赞同! 要是这样理解就明显只创建一个对象嘛!
    正确理解: lz可以把new String("xyz")看成new String(String str),str=‘xyz’;其中后面这个对象是在常量池中创建的!
      

  9.   

    哇靠,,String s = new String("xyz")这个创建了两个对象!不能理解成,new出一个,s一个,2个。流程:new的时候从String类型的常量池里面找,看看有没有一个叫"xyz"的,没有?先往池子里放一个。这就产生了一个对象:常量"xyz"。然后把"xyz"拉过来,new String("xyz")出第二个对象。然后 Stirng s 在栈内存中创建s(不是对象 !!)存放new出对象的首地址。s是在内存中的栈空间里创建了一个引用,存放的不是一个对象,是new出的对象所在的堆内存的首地址,指向了new出的这个对象。再强调,它存储的是new出的对象的首地址,不是对象。所以,要说String s = new String("xyz")建立出几个对象?两个??不一定例如:
    String str = new String("xyz"); //创建了两个
    String s = new String("xyz");//这句绝对只创建了一个对象,那就是S,因为"xyz"在池子里已近有了嘛这是正解!