new String("xxx")返回的是一个对象的应用
所以arr[1]=new String("xxx");实际上是把
arr[1]指向"xxx"

解决方案 »

  1.   

    String[] arr =new String[2];
      String str ="xxx";
      arr[1]=str;
      arr[0]=arr[1];
      System.out.println(arr[0]+"    "+arr[1]);// xxx   xxx
      xx="YY";
      System.out.println(arr[0]+"    "+arr[1]);// xxx   xxx既然都是引用的str,为什么str变了之后,arr[0],arr[1]都不变呢?
      

  2.   

    //上面有一变量写错了。
      String[] arr =new String[2];
      String str ="xxx";
      arr[1]=str;
      arr[0]=arr[1];
      System.out.println(arr[0]+"    "+arr[1]);// xxx   xxx
      str="YY";
      System.out.println(arr[0]+"    "+arr[1]);// xxx   xxx既然都是引用的str,为什么str变了之后,arr[0],arr[1]都不变呢?
      

  3.   

    String[] arr =new String[3];
      arr[0]=arr[1];
      System.out.println(arr[0]);//这是null,可以理解
    /*在这儿数组1与0都指向null*/  arr[1]=new String("xxx");
    /*这儿数组1改变了自己对象,但数组0没有发生变化,仍指向null*?
      System.out.println(arr[0]);//是什么呢?为何还是null
      

  4.   

    假设null的内存地址为0000
    执行这一句后arr[0]=arr[1];两个数组指向的地址都是0000
    执行这一句
    arr[1]=new String("xxx");
    arr[1]的地址变成了新的,而arr[0]仍指向0000这个地址