【问题标题】:Error when copying an array to another in Java在 Java 中将数组复制到另一个数组时出错
【发布时间】:2010-11-01 09:49:09
【问题描述】:

在谷歌上搜索了一段时间后,我知道在 Java 中有很多方法可以将数组复制到另一个数组,即使用 System.arraycopy。

但是我的一些朋友尝试使用它:

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

/* after some computations */

a = b

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

【问题讨论】:

    标签: java arrays copy


    【解决方案1】:

    这根本不是非确定性的。

    a = b;
    

    只需将b 的值分配给ab 的值是对数组的引用——所以现在两个变量都包含对同一个数组的引用。 a 的旧值无关紧要 - 如果它引用了一个没有其他引用的数组,那么它现在将有资格进行垃圾回收。

    请注意,这并非特定于数组 - 这是 所有 引用类型在 Java 中的工作方式。

    基本上,您根本不会将一个数组复制到另一个数组中——您是将一个数组的 reference 复制到另一个变量中。就是这样。

    【讨论】:

    • 不应该是“a 的旧值不相关”吗?
    • @thegravytalker:当然。哎呀。固定。
    【解决方案2】:

    代码行及其含义:

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

    分配一个数组并将其引用分配给a

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

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

    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】:

      记住 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]);
      

      输出是:-

      是的

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-01
        • 2017-09-13
        • 1970-01-01
        • 2022-07-05
        • 2014-08-24
        • 2023-02-24
        • 2011-05-08
        • 1970-01-01
        相关资源
        最近更新 更多