String は Java の文字シーケンスを格納するクラスで、java.lang パッケージに属します。 String オブジェクトが作成されると、変更することはできません (不変)。
すべての String オブジェクトは、String Constant Pool と呼ばれるヒープ領域内の別のメモリ場所に保存されます。
文字列値が定義されるたびに、JVM は指定された値を持つ文字列オブジェクトを文字列定数プールに作成します。したがって、上記のプログラムを実行すると、文字列定数プールに 2 つの文字列値が作成されます。
このメソッドは、一意の文字列値のプールから現在の文字列の値を返します。特定の String に対してこのメソッドを呼び出すと、String 定数プールにその String と等しい String が既に含まれている場合は常にそのメソッドが返されます (Object クラスの equals メソッドに従って)。そうでない場合は、現在の文字列が文字列定数プールに追加され、それへの参照が返されます。
つまり、同じ内容を持つ 2 つの文字列に対してこのメソッドを呼び出した場合、それらは同じメモリを共有することが保証されます。
この方法では、重複した値が複数出現した場合に占有されるメモリを簡単に削減できます。
以下では、同じ内容の 2 つの文字列を (new キーワードを使用して) 作成し、「==」演算子を使用して比較します。両方のオブジェクトは同じ値を持ちますが、同じオブジェクト (メモリ) を参照していないため、結果は false になります。
public class InternExample { public static void main(String args[]) { String str1 = new String("Hello"); str1 = str1.intern(); String str2 = "Hello"; str2 = str2.intern(); System.out.println(str1.equals(str2)); } }
false
ただし、2 つのオブジェクトを比較する前に intern メソッドを呼び出すと、両方のオブジェクトが同じメモリを共有することが保証されるため (内容が同じである場合)、結果は本当だろう。
public class InternExample { public static void main(String args[]) { String str1 = new String("Hello"); str1 = str1.intern(); String str2 = new String("Hello"); str2 = str2.intern(); System.out.println(str1==str2); } }
true
以上がJava の String intern() メソッドの目的は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。