1

Javaでは、カスタムオブジェクトoをタイプとしCustomObjectます。次にCustomObject o2 = o;、の内容をにコピーせずに参照を作成しoますo2CustomObjectしかし、この動作はsの配列に対して残りますか?

CustomObject[] os = new CustomObject[2];
os[1] = o;
os[2] = o;

os[1]とは参照になるのでしょos[2]うか、それともそれらはオブジェクトの直接コピーでoあり、したがって別個のオブジェクトになるのでしょうか?

4

1 に答える 1

7

ええと、あなたは実際に意味os[0]os[1]、配列はJavaでは0ベースなので...しかし、そうです、それらは参照になります。両方の配列要素は同じオブジェクトを参照します。

重要なのoは、オブジェクトでもないということです。

  • o変数です:名前と値があります
  • の値o参照です:nullであるか、オブジェクトを参照しています
  • オブジェクトにはフィールドがあり、特定の実行時タイプなどがあります

式の値(単純な変数値、メソッド呼び出しの結果など)は、Javaでは決してありません。常に参照値またはプリミティブ値のいずれかです。object

Java言語仕様で配列を定義する方法は、変数のコレクションと同じです。

配列オブジェクトには、いくつかの変数が含まれています。変数の数はゼロである可能性があり、その場合、配列は空であると言われます。配列に含まれる変数には名前がありません。代わりに、負でない整数のインデックス値を使用する配列アクセス式によって参照されます。これらの変数は、アレイのコンポーネントと呼ばれます。配列にn個のコンポーネントがある場合、nは配列の長さです。配列のコンポーネントは、0からn-1までの整数インデックスを使用して参照されます。

つまり、実際には次のようになります。

// Creating the pseudo-array
CustomObject o0 = null;
CustomObject o1 = null;

// Populating it
o0 = o;
o1 = o;

相変わらず、代入演算子は右側の値を左側にコピーするだけです。その値は参照です。

于 2013-02-25T21:27:01.117 に答える