-6
class myArray{

    public static void main(String args []){

    int x[]={2,3};
    int y[]={4,5,6};
    System.out.println(x);/*gives something like [I@5445a*/
    System.out.println(y);/*[I@5442c */
    x=y;
    System.out.println(x); /*gives same as that of y (i.e [I@5442c  ). What does happen  here?*/
    System.out.println(x[2]);/* gives 6*/
    }
}

しかし、"x=y" を使用するとどうなるでしょうか? y のアドレスは x または何か他のものに行きますか? これはガベージ値ですか?

4

3 に答える 3

0

Value / Reference and assignmentsJavaで理解しましょう:

1)このコードは、配列のヒープアドレスへの値参照ポインターを提供します。これは単にX と Y のメモリ アドレスを意味します。配列はオブジェクトであり、Java オブジェクトは実際の値ではなくアドレス ポインタを保持するためです。XY

System.out.println(x);/*gives something like [I@5445a*/
System.out.println(y)

2)このコードは のヒープ アドレスを にx=y割り当てます。X と Y の両方がヒープ内の同じアドレスを指すようになりました。これは参照代入と呼ばれます。YX

3)この行は、持っているSystem.out.println(x)のと同じアドレスを出力しYます。参照ポイント#2

4)この行System.out.println(x[2])は、配列内の要素の値を示します。要素は整数です。整数はJavaのプリミティブデータ型です。また、プリミティブ データ型はヒープ内のアドレスではなく、実際の値を保持します。

回答が更新されました:

1) ヒープ内の Array オブジェクトのシンボリック参照[I@5445aを表します。

2) [は配列の次元数を意味します。(1次元)

3) Iは配列の型を意味します。(整数)

4) @5445aは配列オブジェクトの整数ハッシュコードです。次に、ヒープ内の実際の参照に変換されます。また、実際のアドレスが 16 進数であると想定しないでください。他の形式でもかまいません。これは、個々の JVM 実装に依存します。そのベンダー固有。

于 2013-05-21T09:25:25.940 に答える
0

配列変数も、クラス型変数と同様に参照です。したがって、x と y には、メモリ内のどこかにある配列への参照のみが含まれます。その割り当てを見てみましょう。

しかし、"x=y" を使用するとどうなるでしょうか?

はい、Java のオブジェクトと同様に、配列 y へのアドレスが x に格納されます。その結果、x と y は同じ配列を参照し、以前に x によって参照されていた配列は失われます (最終的にはガベージ コレクトされます)。代わりに y のコピーを x に割り当てたい場合は、次を試してください。

x = Arrays.copyOf(y, y.length)

ヒント: 配列の内容を出力したい場合は、次のコードを使用してみてください。

System.out.println(Arrays.toString(x));

Arrays クラスの詳細については、http: //docs.oracle.com/javase/6/docs/api/java/util/Arrays.htmlを試してください。

于 2013-05-21T09:27:21.030 に答える