6

OCPJPの準備をしていますが、次の模擬試験問題で行き詰まりました。

与えられた:

3. interface Animal { void makeNoise(); }

4. class Horse implements Animal {
5.     Long weight = 1200L;
6.     public void makeNoise() { System.out.println("whinny"); }
7. }

8. public class Icelandic extends Horse {
9.     public void makeNoise() { System.out.println("vinny"); }

10.    public static void main(String[] args) {
11.        Icelandic i1 = new Icelandic();
12.        Icelandic i2 = new Icelandic();
12.        Icelandic i3 = new Icelandic();
13.        i3 = i1; i1 = i2; i2 = null; i3 = i1;
14.    }
15. }

14行目に到達すると、ガベージコレクターに適格なオブジェクトはいくつありますか?

A. 0

B. 1

C. 2

D. 3

E. 4

F. 6

彼らの正解はE、つまり4つのオブジェクトですが、理由はわかりません。私の見解では、i2とその重みはガベージコレクションの対象になります。何かが足りないのかもしれませんが、アドバイスしてください。

4

3 に答える 3

8

Icelandic()11IceA行目、12行目などを呼び出しましょIceBう。

作成後

i1 = IceA
i2 = IceB
i3 = IceC

i3 = i1

i1 = IceA
i2 = IceB
i3 = IceA

i1 = i2

i1 = IceB
i2 = IceB
i3 = IceA

i2 = null

i1 = IceB
i2 = null
i3 = IceA

i3 = i1

i1 = IceB
i2 = null
i3 = IceB

したがって、Icelandic()12行目に作成されたものだけが残ります。現在、それぞれIcelandic()にがあり、Long weight参照されていません。つまり、4つのオブジェクト(、、、)がGCで使用できます。IceAIceCIceAIceA.weightIceCIceC.weight


その他の問題:

  1. argsまだargsです、彼らはこの質問で範囲外になることを数えていません
  2. Long weightは静的に宣言されていないため、クラスの各インスタンスにはweightオブジェクトがあります。
于 2012-11-29T21:13:52.050 に答える
3

作成された最初のアイスランドのオブジェクトを「A」、2番目のオブジェクトを「B」、3番目のオブジェクトを「C」と呼びましょう。12行目以降は、それぞれi1、i2、およびi3によって参照されています。

今、私たちはします:

i3 = i1; // object "C" is no longer referenced, object "A" is now referenced by i1 and i3
i1 = i2; // object "A" is just referenced by i3, object "B" is referenced by i1 and i2
i2 = null; // object "B" is just referenced by i1 now
i3 = i1; // object "B" is referenced by i1 and i3, object "A" is no longer referenced

そのため、オブジェクト「A」と「C」は参照されなくなり、それらの「重み」とともにガベージコレクションの対象となるため、合計4つのオブジェクトになります。

于 2012-11-29T21:23:35.637 に答える
2

Icelandicシステムには、3つのインスタンスと1つのインスタンスの4つのオブジェクトがありLongます。

定数オブジェクトをある変数に割り当てると、コンパイラはすべてのインスタンスprivate static final Long long1200 = Long.valueOf(1200L);で共有される種類のオブジェクトを使用します。weight

プリミティブ型ラッパーは不変であるため、この最適化を安全に行うことができます。

編集:おそらく私は間違っています、なぜならここで同じ定数を数回参照した場合、これはこのように機能するからですが、そうではありません

于 2012-11-29T21:22:04.530 に答える