【问题标题】:strange copy values from one array to another [duplicate]奇怪的将值从一个数组复制到另一个[重复]
【发布时间】:2013-11-08 18:18:53
【问题描述】:

在看Java代码示例的时候,看到了一段奇怪的代码:

public class Application {
     public static void main(String[] args) {
          String[] x = {"A"};
          String[] y = x;
          x[0] = "B";
          System.out.print(x[0] + " " + y[0]);
     }
}

我不明白,为什么结果“B B”是正确的?当我创建并初始化一个数组 x 和 y 并分配数组 x 的零元素等于 B 时,我认为答案必须是“B A”。

【问题讨论】:

    标签: java


    【解决方案1】:
    String[] y = x;
    

    表示数组y 现在引用数组x

    随之改变x的内容意味着y的内容改变(因为它们是相同的)。

    用Java详细说明一下:

    String[] y = {...};
    

    意味着您声明y 是一个对数组的引用,而不是数组本身。因此,当您分配时,您分配的是引用而不是复制对象值。

    【讨论】:

    • 请告诉我在哪里可以更详细地阅读它?
    • 但是,为什么这个代码: public class Application { public static void main(String[] args) { String x = "A";字符串 y = x; x = "乙"; System.out.print(x + " " + y); } } 显示正确的结果“B A”
    【解决方案2】:

    这就是我们在 Java 中复制数组的方式。这就是你现在正在做的事情:

      x        y
    +---+    +---+ 
    | a |<---|-- |
    +---+    +---+
    

    所以当你改变x的内容时,y的内容也会改变。

    如果要复制数组,可以使用Arrays#copyOf

    String[] y = Arrays.copyOf(x, x.length);
    

    现在,如果您更改 xy 将不会更改。

    【讨论】:

      【解决方案3】:

      在 Java 中,数组被视为对象引用。您正在将值更改为引用。

      为了说明,试试这个

         String[] x = {"A"};
         String[] y = x;    
         System.out.println(x==y);   //true -> X and Y are pointing the same reference. 
      

      【讨论】:

        【解决方案4】:

        当调用赋值运算符时,Java 总是按值复制。你这样声明你的第一个数组:

        字符串[] x = {"A"};

        并且 x 现在持有对该数组的引用。当您将 x 分配给 y 时,它只是将对数组 x 的引用复制到 y 变量,因此现在 x 和 y 都表示同一个数组。当您更改一个数组中的某些内容时,该更改也会影响其他数组。 Look here for better understanding

        【讨论】:

        • 此链接不会重定向
        猜你喜欢
        • 2012-09-28
        • 2017-07-29
        • 1970-01-01
        • 2022-07-05
        • 1970-01-01
        • 1970-01-01
        • 2016-04-10
        • 2018-02-16
        • 1970-01-01
        相关资源
        最近更新 更多