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"; 修改了!
这是怎么回事呀
{
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"; 修改了!
这是怎么回事呀
就是说array和internalData引用的是同一个对象。
也可以说array和internalData都是指针。array[0] = "...";
array和internalData引用的对象被修改了,所以internalData[0]的值为 "..."。用C++来讲吧,就是这样:
int internalData[2];
int * array = internalData;
*array = //... ;
internalData[0]的值肯定变了。
array和 internalData相当于两个引用,而array[0]相当于array指向的对象,当把array和internalData指向同一个对象后,改变了array[0],自然会改变internalData所指的对象的值.
所以你后面一次getdata并没有重新赋“aaa”,自然是改了!!
{
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 ] );
}
}
{
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只是把引用指向为空呀