public class Example
   {
      private String [ ] internalData;      public Example ( )
         {
            internalData = new String [ 2 ];
            internalData [ 0 ] = "aaa";
            internalData [ 1 ] = "bbb";
         }      public String [ ] getData ( )
         {
            return internalData;
         }      public static void main ( String args [ ] )
         {
            Example example = new Example ( );
            String [ ] array = example.getData ( );
            array [ 0 ] = "This is a new String";
            array = example.getData ( );
            System.out.println ( array [ 0 ] );
         }
   }internalData 的值居然被 array [ 0 ] = "This is a new String"; 修改了!
这是怎么回事呀

解决方案 »

  1.   

    String [ ] array = example.getData ( );array就是一个指针,和internalData一样都是指向一个二维数组。
    就是说array和internalData引用的是同一个对象。
    也可以说array和internalData都是指针。array[0] = "...";
    array和internalData引用的对象被修改了,所以internalData[0]的值为 "..."。用C++来讲吧,就是这样:
    int internalData[2];
    int * array = internalData;
    *array = //... ;
    internalData[0]的值肯定变了。
      

  2.   

    有问题吗?很正常呀. 
    array和 internalData相当于两个引用,而array[0]相当于array指向的对象,当把array和internalData指向同一个对象后,改变了array[0],自然会改变internalData所指的对象的值.
      

  3.   

    本来就改了嘛```你那个类赋值是在构造函数里啊!!
      所以你后面一次getdata并没有重新赋“aaa”,自然是改了!!
      

  4.   

    public class Example
    {
    public String [ ] internalData;   public Example ( )
          {
             internalData = new String [ 2 ];
             internalData [ 0 ] = "aaa";
             internalData [ 1 ] = "bbb";
          }   public String [ ] getData ( )
          {
             return internalData;
          }   public static void main ( String args [ ] )
          {
             Example example = new Example ( );
             String [ ] array = example.getData ( );
             array [ 0 ] = "This is a new String";
             example = new Example ( );
             array = example.getData();
             System.out.println ( array [ 0 ] );
          }
    }
      

  5.   

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!public class Example_2
       {
          private String [ ] internalData;      public Example_2 ( String [ ] data )
             {
                internalData = new String [ data.length ];
                System.arraycopy ( data , 0 , internalData , 0 , data.length );
             }      public String [ ] getData ( )
             {
                return internalData;
             }      public static void main ( String args [ ] )
             {
                String [ ] someData = { "String1" , "String2" };
                Example_2 example = new Example_2 ( someData );
                someData [ 0 ] = null;
                System.out.println ( example.getData ( ) [ 0 ] );
             }
       }哦,前面的知道了,那为什么someData [ 0 ] = null;也修改了internalData呀
    someData [ 0 ] = null只是把引用指向为空呀