0
  1. ゼロがそれを参照する唯一の変数であっても、値「犬」を保持する String オブジェクトはまだインターンされていると見なされますか?

    String zero = "dog";
    
  2. このコードにはいくつのオブジェクトがありますか? インターンされたオブジェクトがスコープを無視するために 1 になるか、スコープがまだ適用されるために 2 になります。

    String jack = "skellington";
    
    for(//stuff)
    {
    String sally = "skellington";
    }
    
4

2 に答える 2

2

文字列リテラルは常にインターンされます。つまり、プールが作成されます。1 つの文字列リテラルを宣言した後、JVM のそのインスタンスの任意の場所で参照されている場合、それはプールからのみ選択されます

1)1つのオブジェクトが作成されます。行の下で参照されているかどうかは関係ありません

2) 1 つのオブジェクトが作成されます

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.htmlのインターン メソッドを参照してください。

于 2013-04-05T17:21:30.900 に答える
1

このコードにはいくつのオブジェクトがありますか? インターンされたオブジェクトがスコープを無視するために 1 になるか、スコープがまだ適用されるために 2 になります。

java は指定されたアプリケーションの Stringpool に String リテラルをインターンするため、コード用に作成されるオブジェクトは 1 つだけになります。Java言語仕様で指定されている文字列リテラルを見てください。文字列リテラルについて次の点を述べています。

  • 同じパッケージ (§7) 内の同じクラス (§8) 内のリテラル文字列は、同じ String オブジェクト (§4.3.1) への参照を表します。

  • 同じパッケージ内の異なるクラス内のリテラル文字列は、同じ String オブジェクトへの参照を表します。

  • 同様に、異なるパッケージの異なるクラス内のリテラル文字列は、同じ String オブジェクトへの参照を表します。

  • 定数式 (§15.28) によって計算された文字列は、コンパイル時に計算され、リテラルであるかのように扱われます。

  • 実行時に連結によって計算された文字列は新しく作成されるため、区別されます。

  • 計算された文字列を明示的にインターンした結果は、同じ内容の既存のリテラル文字列と同じ文字列になります。

于 2013-04-05T17:23:05.290 に答える