在为这个问题做例子时
intern()
当我调用intern()
方法时,我注意到方法的一种奇怪行为,String
此后我可以将==
运算符用于Original String。
方法的JavaDoc intern()
:
返回字符串对象的规范表示。一个字符串池,最初是空的,由 String 类私下维护。
当调用 intern 方法时,如果池中已经包含一个与该方法确定的该 String 对象相等
equals(Object)
的字符串,则返回池中的字符串。否则,将此 String 对象添加到池中并返回对该 String 对象的引用。由此可见,对于任何两个字符串
s
和t
,s.intern() == t.intern()
当且仅当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");
}
}
}