String a = new String("xyz");
String b = new String("xyz");
String c = new String(a);
String d = b;以上代码总共声明了几个String对象?希望能看到分析的过程

解决方案 »

  1.   

    3个
    每次使用new就会创建一个对象,
    最后一次是传引用。System.out.println(a==b);
    System.out.println(a==c);
    System.out.println(a==d);
    System.out.println(d==b);
    结果
    false
    false
    false
    true
      

  2.   

    对象不是声明的,声明的是对象的引用。对象是被new(实例化)的。
    在String a = new String("xyz"); 中,首先,左边的部分开辟了一块内存,申明a,a在栈中被初始化,之后()中"xyz"首先被加载到java的字符串池中,为一个对象的创建。之后又new了一个String类型的对象,又在堆中开辟了一块内存,内存的中值为"xyz"指向a,这个值在被垃圾回收前将一直存在,之后再如String a = new String("xyz");这样的变量赋值不会再创建"xyz".这个值取自java自带的字符串池。这里创建了两个对象"xyz"以及指向a的对象。
    所以String b = new String("xyz");同上,只是不再创建"xyz"这个对象,因为他已经存在于字符串池中了。这里创建了一个指向b的对象
    String c = new String(a);这里告诉你,凡是new的对象一定是新开辟的一块内存,也就是一个新的对象。在这里这个对象引用了a对象里的值。创建了一个指向c的对象。这里创建了一个对象
    String d = b,在这里并没有new对象,只是声明了一个引用d,并且把引用b的对象同样指向d。这里b==d都是指向同一个对象,这里没有创建对象。
    所以一共创建了四个对象
      

  3.   

    String a = new String("xyz"); //1
    String b = new String("xyz"); //2
    String c = new String(a);     //3
    String d = b;                 //4声明了4个对象引用(开辟了四个栈内存):String a,String b,String c,String a;
    实例化了三个对象(开辟了三个堆内存);new String(xyz);new String(xyz);new String(a);
    1,2,3请结合上面看,4直接将引用指向2中堆内存。
      

  4.   

    当然是3个String 对象了,不过这三个对象的值都是一样的。
      

  5.   

    一共应该是七个 每一个都是创建两个对象 最后一个是创建一个对象 例:第一个首先创建了一个a对象,然后又给XYZ在内存中分配了空间 所以是两个,而最后一个就创建了一个对象
      

  6.   

    顶4个 
    第一个new是时候是两个
    然后以后每次new的时候一个
      

  7.   

    根据String str = new String("str1");   //创建2个对象. str , str1可以得出.String a = new String("xyz");   //创建2个对象 a , xyz
    String b = new String("xyz");   //创建2个对象 b , xyz
    String d = b;  //创建一个对象d ------------------------------
    String c = new String(a);    
    楼主就是纠结在这里了.. 由
            String a = new String("xyz");
           String c = new String(a);
           System.out.println(a  == c);  //输出false.可以得出, a 与 c 是不同的对象.实际上String c = new String(a); 最终 相当于 String c = new String("xyz");
    所以最后结果是7个..有不同意见可以丢砖.
      

  8.   

    至于引用是不是对象我也弄不清楚, 但是我可以肯定是7个.
       
    如:
    String a = new String("xyz");
    到底是a ,xyz, 还是xyz(heap), xyz(Strings pool) 我也需要人解惑..
      

  9.   

    这是喜欢 Thinking in Java 一书的人最喜欢研究的问题!不愧是所谓的“Java 经典书”啊!
      

  10.   

    http://topic.csdn.net/u/20080107/16/D176D162-E179-4303-B945-ADA5CB1CBA05.html仔细看完哈,  或者你可以得出你自己的想法...
      

  11.   

    这种问题没必要这样纠结嘛!
    不过我看了两遍thinging in java,也没纠结这种问题嘛。
    书没问题,读书的人有问题,分不清啥是精华,啥是鸡肋。
      

  12.   

    String a = new String("xyz");
    String b = new String("xyz");
    String c = new String(a);
    String d = b;String a              1
    new String("xyz")     1
    String b              1
    new String("xyz")     0 这个引用 上面的一个 
    String c              1
    new String(a)         1
    String d              1
    -------------------------
                           6一共是6个对象