1. ホーム
  2. java

[解決済み] Java の文字列プールとは何ですか?また、"s" と new String("s") とはどう違うのですか?重複

2022-08-17 02:10:45

質問

の意味するところは 文字列プール ? また、以下の宣言の違いは何ですか。

String s = "hello";
String s = new String("hello");

JVMによるこれら2つの文字列の保存に違いはありますか?

どのように解決するのですか?

文字列プールは、JVMの特殊な実装であり、その概念は 文字列インターン :

<ブロッククオート

コンピュータサイエンスにおいて、文字列インターン を1つだけ保存する方法です。 を保存する方法です。 は不変でなければなりません。文字列のインターン 文字列をインターンすることで、文字列処理タスクの一部 文字列を内部化することで、文字列処理タスクの時間効率や空間効率を向上させることができます。 文字列をインターンすることで、ある種の文字列処理タスクは時間的または空間的に効率的になりますが、その代償として 文字列の作成時やインターン時に多くの時間を必要とします。このような場合 は,文字列 インターンプールに格納されます。

基本的に、文字列インターンプールは、アプリケーションの領域が複数のインスタンスを作成する代わりに、共通の文字列のインスタンスを再利用できるように、ランタイムがプール内に不変の文字列を保存することによってメモリを節約することを可能にします。

興味深い余談ですが、文字列インターンは フライウェイトデザインパターン :

Flyweightは、ソフトウェアのデザインパターン パターンです。フライウェイトとは、以下のようなオブジェクトのことです。 他のオブジェクトとできるだけ多くのデータを共有することで、メモリの使用を最小限に抑えることができます。 他の類似のオブジェクトとできるだけ多くのデータを共有することで を使用する方法です。 オブジェクトを大量に使用する方法です。 オブジェクトを大量に使用する方法です。 大量に使用する方法です。