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也变了?

解决方案 »

  1.   

    int[]a={1,2,3},b=a; 
    因为b是一个引用,它引用的是a,也就是说,a和b指向一个数组,该数组有2个引用名字,一个是a,一个是b,共享一段内存
      

  2.   

    原因同1,2楼如果让b数组不随a变化而变化,可以用clone方法
    int[] b = (int[])a.clone();
      

  3.   

    int[]a={1,2,3},b=a;
    其中 int[]a={1,2,3}   开辟了一段内存地址空间,a中存的是地址而不是确切的数据
    b=a    是将a中存的地址传给b,
    操作结束后a和b中存的是相同的地址,所以a改变后b也会改变
      

  4.   

    a和b都是栈内存中的变量,而都指向堆内存的同一个对象,a改变了,所以b也就变了
      

  5.   

    分配的内存都在栈上,只有NEW出来的才是分配在堆上的