文字列定数プール: インターンと参照
Java の「文字列定数プール」の概念は、文字列メモリ管理において重要な役割を果たします。文字列リテラルは、コンパイラーによって検出されると、プール内にインターンされます。これは、同じ値を持つ String オブジェクトがプール内にすでに存在する場合、新しいオブジェクトを作成する代わりに、既存のオブジェクトへの参照が使用されることを意味します。
ただし、「new」キーワードがキーワードの前にある場合は、文字列リテラル。JVM は新しい String オブジェクトを作成する義務があります。これは、インターンに関する前述の記述と矛盾しているように見えるかもしれません。この動作を理解するには、文字列リテラルへの参照がプールに存在する可能性がある一方で、「new」を使用すると、既存のオブジェクトを使用するのではなく、新しいオブジェクトが作成されることに注意することが重要です。
これを説明するにはこの概念では、次の例を考えてみましょう。
String one = new String("test"); String two = "test";
このシナリオでは、リテラルの「test」がプールにインターンされ、その結果、プール メモリと非プール メモリの両方で参照が行われます。ただし、「new」が使用されたため、JVM は「test」の新しい String オブジェクトを作成し、それを参照「one」に割り当てます。
ここで、「equals」を使用して「one」と「two」を比較します。 true を返し、それらに同じ値が含まれていることを示します。ただし、「==」を使用すると false が返され、それらが異なるオブジェクトを参照していることが確認されます。
System.out.println(one.equals(two)); // true System.out.println(one == two); // false
ステートメント「コンパイラーが String リテラルを検出すると、同一の String がすでに存在するかどうかを確認します。文字列は、明示的にインターンされるか、クラス内でリテラルとして使用される場合にのみプールに配置されます。文字列が他の手段 (連結やユーザー入力など) で作成された場合、同じ値で存在する可能性がありますが、プールには存在しません。
以上が文字列定数プール: \"new\" はいつ新しい文字列オブジェクトを作成しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。