ゼロがそれを参照する唯一の変数であっても、値「犬」を保持する String オブジェクトはまだインターンされていると見なされますか?
String zero = "dog";
このコードにはいくつのオブジェクトがありますか? インターンされたオブジェクトがスコープを無視するために 1 になるか、スコープがまだ適用されるために 2 になります。
String jack = "skellington"; for(//stuff) { String sally = "skellington"; }
2 に答える
文字列リテラルは常にインターンされます。つまり、プールが作成されます。1 つの文字列リテラルを宣言した後、JVM のそのインスタンスの任意の場所で参照されている場合、それはプールからのみ選択されます
1)1つのオブジェクトが作成されます。行の下で参照されているかどうかは関係ありません
2) 1 つのオブジェクトが作成されます
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.htmlのインターン メソッドを参照してください。
このコードにはいくつのオブジェクトがありますか? インターンされたオブジェクトがスコープを無視するために 1 になるか、スコープがまだ適用されるために 2 になります。
java は指定されたアプリケーションの Stringpool に String リテラルをインターンするため、コード用に作成されるオブジェクトは 1 つだけになります。Java言語仕様で指定されている文字列リテラルを見てください。文字列リテラルについて次の点を述べています。
同じパッケージ (§7) 内の同じクラス (§8) 内のリテラル文字列は、同じ String オブジェクト (§4.3.1) への参照を表します。
同じパッケージ内の異なるクラス内のリテラル文字列は、同じ String オブジェクトへの参照を表します。
同様に、異なるパッケージの異なるクラス内のリテラル文字列は、同じ String オブジェクトへの参照を表します。
定数式 (§15.28) によって計算された文字列は、コンパイル時に計算され、リテラルであるかのように扱われます。
実行時に連結によって計算された文字列は新しく作成されるため、区別されます。
計算された文字列を明示的にインターンした結果は、同じ内容の既存のリテラル文字列と同じ文字列になります。