この質問の例を実行しながら
method onintern()
を呼び出すと、メソッドの奇妙な動作に気付きました。その後、 Original Stringに operator を使用できます。intern()
String
==
メソッドの JavaDoc intern()
:
文字列オブジェクトの正規表現を返します。最初は空である文字列のプールは、クラス String によってプライベートに維持されます。
intern メソッドが呼び出されたときに、メソッドによって決定されたこの String オブジェクトと等しい文字列がプールに既に含まれている場合は、プール
equals(Object)
からの文字列が返されます。それ以外の場合は、この String オブジェクトがプールに追加され、この String オブジェクトへの参照が返されます。したがって、任意の 2 つの文字列
s
およびt
について、s.intern() == t.intern()
が true である場合にのみ true となりs.equals(t)
ます。
上記のJavadocは、元の文字列が変更されるとは言っていません。では、なぜこのプログラムは入力がokay
いつなのかを出力test
します。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner user_input = new Scanner(System.in);
String username;
System.out.print("username: ");
username = user_input.next();
// Even if I do not assign returned string for comparison still it compares
// okay else it does not compare
username.intern();
if (username == "test") {
System.out.println("okay");
}
else {
System.out.println("not okay");
}
}
}