このWhen should we use intern method of String on String constants で説明されているように、String リテラルは自動的にプールされますが、new を使用して構築されたオブジェクトはプールされないため、その intern メソッドが使用されます。しかし、intern メソッドを使用しても新しいオブジェクトが作成される場合、intern メソッドの使用は何ですか?
String s = "Example";
String s1 = new String("Example"); // will create new object
String s2 = new String("Example").intern(); // this will create new object
// but as we are calling intern we will get reference of pooled string "Example"
今
System.out.println(s == s1); // will return false
System.out.println(s == s2); // will return true
System.out.println(s1 == s2); // will return false
では、インターン メソッドの用途は何ですか?
編集
私はインターン メソッドの働きを理解しましたが、私の質問はなぜインターン メソッドがあるのですか? intern メソッドを呼び出すには、new を使用して文字列オブジェクトを作成する必要があるため、文字列の新しいインスタンスが作成されます。
String s3 = new String("Example"); // again new object
String s4 = s3.intern();
System.out.println(s3 == s4); // will return false
そのため、intern メソッドを呼び出しても、s3 がプールされた文字列を指すことはありません。intern メソッドは、プールされた文字列への参照を返します。
また、インターンを呼び出すと、まだプールされていない場合、文字列がプールにプッシュされますか? つまり、任意の文字列でインターンを呼び出すたびに、プールにプッシュされるということですか?