Java 文字列プール: スタック割り当てとヒープ ストレージ
次のコード スニペットを考えてみましょう。
String first = "abc"; String second = new String("abc");
インスタンス化new キーワードを指定した new String オブジェクトは、ヒープ上に個別の String オブジェクトを作成します。他のプリミティブとは異なり、String オブジェクトは不変です。つまり、初期化後に変更することはできません。
ただし、Java はヒープ内に String プールを維持し、限られた数の一般的に使用される String を格納します。リテラル String (二重引用符で囲まれた) が定義されると、コンパイラーは String プールで既存の一致する String を確認します。見つかった場合、リテラル文字列はプール内の既存の文字列を参照し、メモリ効率を確保します。
この例では、「abc」はリテラル文字列であるため、文字列プールに配置されます。
ここで、new String("abc") で作成された新しい String オブジェクトを考えてみましょう。
したがって、コードの結果は、文字列プール内の 1 つの文字列 ("abc"") と 1 つの文字列になります。ヒープ上の個別の文字列 (new String("abc") で作成されたもの)。
以上がJava 文字列プール: ヒープまたはスタック - 文字列オブジェクトはどこに存在しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。