int[][] a = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
int[][] b = new int[3][3];
System.arraycopy(a,0,b,0,b.length);
a[2][2] = 1;
System.out.println(b[2][2]);结果是1这和 a  = b; 有什么区别....
怎么完全复制数组,让b的内容在内存里独立占一块,改变a的同时b保持原样不变?

解决方案 »

  1.   

    不会吧 java里难道就没这个方法....
      

  2.   

    关于对象的clone方法,java中应该都是浅拷贝的如果要深拷贝,需要重写Object的clone()方法
      

  3.   

    可以用克隆来实现
    可以实现cloneable
    也可以重写clone()
    Java的克隆分为浅拷贝和深拷贝
    当然前提你需要了解一下Java的反射机制
      

  4.   

    回答:这和 a  = b; 有什么区别....--->  a=b     a和b指向同一个内存,a[2][2]和b[2][2]指向同一个值
    回答:怎么完全复制数组,让b的内容在内存里独立占一块,改变a的同时b保持原样不变?System.arraycopy(a,0,b,0,b.length);--->你上面的做法已经完成了你的想法。
      

  5.   

    public class a
    {
        public static void main(String [] args)
        {
    int[][] a = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
    int[][] b = new int[3][3];
    System.arraycopy(a,0,b,0,b.length);
    a[2][2] = 1;
    System.out.println(b[2][2]);
    System.out.println(a == b);
    System.out.println(a[0] == b[0]);
        }
    }楼主跑一下这个程序应该就明白了:)
      

  6.   

    琢磨明白了 System.arraycopy只能拷贝一元数组,要深层拷贝多元数组还是得自己实现.
      

  7.   

    public class Test{
    public static void main(String args[]){
    int num1[][]=new int[][]{{1,2,3},{4,5,6},{7,8,9}};
    int [][]num2=new int[3][3];
    System.arraycopy(num1,0,num2,0,num2.length);
    num2[2][2]=45;
    System.out.print(num1[2][2] +"    ");
    System.out.print((num1==num2) + "\t");
    System.out.print((num1[2]==num2[2] )+ "   ");}
    }
    运行结果为:45  false   true
    这是怎么一回事???高手解答一下