2012-01-06 7 views

答えて

2

2番目の質問に対する答えははいです。Eclipseのデバッガで表示される「id」はオブジェクトを一意に識別するため、その変更は新しいオブジェクトが作成されたことを意味します。したがって、たとえば:

ここで、iとkは同じオブジェクトを参照するため、同じIDを持ちます。 jは異なります。

これらのオブジェクトの1つのメモリアドレスは、オブジェクトがメモリ内を移動するため、実際には有用な情報ではありません。あなたが知ることができるのは、i == kの場合、それらは同じオブジェクトです。 (だからここではi == kだがi!= j)。

6

なぜあなたはJavaで任意のオブジェクトのメモリアドレスが必要でしょうか?あなたが言うことができるのは、Integerインスタンスがヒープにあるということだけです。あなたは正確な住所を見つけることができません。

第2の質問:はい、Integerのオブジェクトは不変なので、タイプがIntegerの変数の値が変更された場合、Integerの別のインスタンスを示します。ただし、必ずしも新しいインスタンスがを作成したことを意味するわけではありません。 new Integer(42)は常に新しいインスタンスを作成し、Integer.valueOf(42)は呼び出されるたびに同じインスタンスを作成します。

+2

ガベージコレクションがオブジェクトを移動させて空き領域を合体させるため、アドレスの変更は時間の経過と共に変化する可能性があります。 – 9000

+0

私は疑問があります。最初に「Integer」を作成することなく、「Integer」の別のインスタンスをどのように指し示すことができますか? – JAM

+0

'Integer x = 42'は実際には' Integer x = Integer.valueOf(42) 'に変換されます* *新しいインスタンスを生成するか、キャッシュされたものを使うかもしれません。 –

0

JVM開発チームから非常に近いものがないと、参照変数に格納されているデータ/アドレスのタイプがわかりません。私たちが必要とするのは、その参照に存在するオブジェクトへのアクセスとそれを操作/実行することだけです。

質問の第2部分についてはわかりません。また、ID(デバッガで)がJavaヒープメモリの場所を参照するかどうか確認できません。

関連する問題