ホームページ >Java >&#&チュートリアル >Java 文字列プール: ヒープまたはスタック - 文字列オブジェクトはどこに存在しますか?

Java 文字列プール: ヒープまたはスタック - 文字列オブジェクトはどこに存在しますか?

DDD
DDDオリジナル
2024-12-17 21:14:12894ブラウズ

Java String Pool: Heap or Stack—Where Does a String Object Reside?

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 オブジェクトを考えてみましょう。

  • A new String オブジェクトは String プールではなくヒープ上に作成されます。
  • リテラル "abc" のコピーであるにもかかわらず、このオブジェクトは String プールには保存されません。

したがって、コードの結果は、文字列プール内の 1 つの文字列 ("abc"") と 1 つの文字列になります。ヒープ上の個別の文字列 (new String("abc") で作成されたもの)。

以上がJava 文字列プール: ヒープまたはスタック - 文字列オブジェクトはどこに存在しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。