0

模擬試験の質問:

Consider the following code:

String entree = new String (“chicken”);
String side = “salad”;
entree = “turkey”;
String dessert;
entree = side;
String extra = entree + side;
dessert = “pie”;

How many String objects were created, and how many are accessible at the end?
How many aliases are present, and is there any garbage?

私のロジック:3つのリテラルが作成され、1つはnew演算子を使用した文字列、もう1つはメインディッシュとサイドを連結しているため、合計5つのオブジェクトになります。

デザートとエクストラは2つのオブジェクト、サイドと3番目のメインディッシュの割り当てです。したがって、作成された合計5つのうち4つのオブジェクトにアクセスできます。

1エイリアス、メインディッシュはサイドを指します。

ごみ、メインディッシュは「七面鳥」と「鶏肉」への言及を失いました。

この質問に対する私の思考プロセスを評価するのを手伝ってもらえますか?

4

1 に答える 1

1

まだ作成されていない場合は、4つのリテラルが作成されます。

new String文字列に1つまたは2つの新しいオブジェクトが含まれているため、は1つまたは2つの新しいオブジェクトを作成できます。char[]

文字列リテラルは、クラスがアンロードされるまで解放されません。

String+を使用すると、、 StringBuilder1つまたは2つchar[]、およびaStringが作成されます。

String extra = entree + side;

に翻訳することができます

String extra = new StringBuilder().append(entree).append(side).toString();

これは、新しいStringBuilder/Stringがそれぞれ1つchar[]ずつあることを意味します。

これは、ガベージコレクションできるオブジェクトが最大6つあることを意味します。

于 2012-12-15T20:59:08.350 に答える