質問:
Java では、どのような状況でインターン ( ) 文字列のメソッドリテラル?
答え:
Java は文字列リテラルを自動的にインターンします。これは、その値が定数プールに格納され、複数の文字列オブジェクトによって参照されることを意味します。ただし、 intern() メソッドは、new 演算子を使用して作成された文字列を操作する場合に便利です。
説明:
「Rakesh」などの文字列リテラルは、自動的にインターン生。これは、new String("Rakesh") によって返される文字列参照が常にリテラルの "Rakesh" と同じオブジェクトを指すことを意味します。
ただし、new で作成された文字列はインターンされません。コード String s4 = new String("Rakesh") は、「Rakesh」の値が定数プールにすでに存在している場合でも、メモリ内に新しいオブジェクトを作成します。この新しく作成された文字列を強制的にインターンするには、 String s5 = new String("Rakesh").intern() に示すように、 intern() メソッドを使用できます。
したがって、 intern() メソッドはを使用して作成された場合でも、複数の文字列オブジェクトが定数プール内の同じオブジェクトを参照していることを手動で確認したい場合に使用する必要があります。 new.
例:
次のコードを考えます:
String s1 = "Rakesh"; String s2 = "Rakesh"; String s3 = "Rakesh".intern(); String s4 = new String("Rakesh"); String s5 = new String("Rakesh").intern(); if (s1 == s2) { System.out.println("s1 and s2 are same"); // 1. } if (s1 == s3) { System.out.println("s1 and s3 are same"); // 2. } if (s1 == s4) { System.out.println("s1 and s4 are same"); // 3. } if (s1 == s5) { System.out.println("s1 and s5 are same"); // 4. }
出力は次のようになります:
s1 and s2 are same s1 and s3 are same s1 and s5 are same
行 1、2、および 4 は、s1、s2、s3、および s5 がすべて定数プール内の同じオブジェクトを参照します。行 3 は、s4 が s1 と同じ値を持つにもかかわらず、メモリ内の別のオブジェクトであることを示しています。
以上がJava の String `intern()` メソッドをいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。