代码之家  ›  专栏  ›  技术社区  ›  Enrico Susatyo

在Java中将数组复制到另一个数组时出错

  •  2
  • Enrico Susatyo  · 技术社区  · 15 年前

    在Google过了一段时间之后,我意识到有很多方法可以在Java中复制一个数组到另一个数组,即使用Stase.AlayAc拷贝。

    然而,我的一些朋友尝试使用这个:

    boolean a[][] = new boolean[90][90];
    boolean b[][] = new boolean[90][90];
    
    /* after some computations */
    
    a = b
    

    这会产生一个相当不确定的结果,有人知道这实际上是做什么的吗?

    3 回复  |  直到 15 年前
        1
  •  11
  •   Jon Skeet    15 年前

    这根本不是不确定性的。

    a = b;
    

    只需指定 b a . 价值 是对数组的引用-因此现在两个变量都包含对同一数组的引用。旧的价值观 是不相关的——如果它引用了一个没有其他引用的数组,那么它现在就可以进行垃圾收集了。

    请注意,这不是特定于数组的-它是 全部的 引用类型在Java中工作。

    基本上,您根本没有将一个数组复制到另一个数组中-您正在复制 参考 将数组转换为另一个变量。这就是全部。

        2
  •  0
  •   Kerem Baydoğan David Zorychta    15 年前

    代码行及其含义:

    boolean a[][] = new boolean[90][90];
    

    分配数组并将其引用分配给

    boolean b[][] = new boolean[90][90];
    

    分配第二个数组并将其引用分配给

    a = b;
    

    将bs值(第二个数组引用)分配给a。

    a= b之前;

    a ---------> First arrays memory space
    
    b ---------> Second arrays memory space
    

    A= B之后;

    a ---           First arrays memory space
         ---
            ------>
    b ------------> Second arrays memory space
    

    现在你永远失去了第一个阵列

        3
  •  0
  •   Kuntal Basu    15 年前

    记住a=b意味着将b的值赋给a

        boolean a[][] = new boolean[90][90];
        boolean b[][] = new boolean[90][90];
        a[0][3]=false;
        b=a;
        a[0][5]=true;
    
        System.out.println(b[0][3]);
        System.out.println(b[0][5]);
    

    输出是: