3

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" でなければならないと思います。

4

4 に答える 4

6
String[] y = x;

は、配列が配列yを参照するようになったことを意味しxます。

したがって、内容を変更xするということは、内容を変更することを意味しyます (同じなので)。

詳しく説明すると、Java では次のようになります。

String[] y = {...};

配列自体ではなく、配列への参照であることを宣言しyていることを意味します。したがって、割り当てるときは、オブジェクトの値をコピーするのではなく、参照を割り当てます。

于 2013-10-29T14:22:16.447 に答える
2

これが、Java で配列をコピーする方法です。それがあなたが今していることです:

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

したがって、 の内容を変更するとx、 の内容yが変更されます。

配列をコピーする場合は、次を使用できますArrays#copyOf

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

今、変更してもxy変更されません。

于 2013-10-29T14:22:45.297 に答える
1

Java 配列では、オブジェクト参照と見なされます。値を参照に変更しています。

説明のためにこれを試してください

   String[] x = {"A"};
   String[] y = x;    
   System.out.println(x==y);   //true -> X and Y are pointing the same reference. 
于 2013-10-29T14:24:03.710 に答える
0

代入演算子が呼び出されると、Java は常に値によるコピーを行います。最初の配列を次のように宣言しました。

文字列[] x = {"A"};

x はこの配列への参照を保持するようになりました。x を y に代入すると、配列 x への参照が y 変数にコピーされるだけなので、x と y の両方が同じ配列を表すようになります。ある配列で何かを変更すると、その変更は他の配列にも影響します。 理解を深めるにはこちらをご覧ください

于 2013-10-29T14:27:42.647 に答える