public class Ex4_8 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[]a={1,2,3},b=a;
a[0]=a[1]+1;a[1]=a[2]+1;a[2]=a[0]+1;
for(int i=0;i<3;i++) System.out.print(a[i]+" ");
System.out.println();
for(int i=0;i<3;i++) System.out.print(b[i]+" ");
System.out.println();
}
}为什么输出结果为:3 4 4
3 4 4
刚开始把数组a复制给数组b,后来改变的只有数组a,为什么输出结果显示数组b也变了?
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[]a={1,2,3},b=a;
a[0]=a[1]+1;a[1]=a[2]+1;a[2]=a[0]+1;
for(int i=0;i<3;i++) System.out.print(a[i]+" ");
System.out.println();
for(int i=0;i<3;i++) System.out.print(b[i]+" ");
System.out.println();
}
}为什么输出结果为:3 4 4
3 4 4
刚开始把数组a复制给数组b,后来改变的只有数组a,为什么输出结果显示数组b也变了?
因为b是一个引用,它引用的是a,也就是说,a和b指向一个数组,该数组有2个引用名字,一个是a,一个是b,共享一段内存
int[] b = (int[])a.clone();
其中 int[]a={1,2,3} 开辟了一段内存地址空间,a中存的是地址而不是确切的数据
b=a 是将a中存的地址传给b,
操作结束后a和b中存的是相同的地址,所以a改变后b也会改变