<分区>
Possible Duplicate:
intern() behaving differently in Java 6 and Java 7
在为 this question 做例子时
当我在 String
上调用 intern()
方法时,我注意到 intern()
方法有一个奇怪的行为,此后我可以使用 ==
原始字符串的运算符。
intern()
方法的 JavaDoc:
Returns a canonical representation for the string object. A pool of strings, initially empty, is maintained privately by the class String.
When the intern method is invoked, if the pool already contains a string equal to this String object as determined by the
equals(Object)
method, then the string from the pool is returned. Otherwise, this String object is added to the pool and a reference to this String object is returned.It follows that for any two strings
s
andt
,s.intern() == t.intern()
is true if and only ifs.equals(t)
is true.
上面的 Javadoc 并没有说 原始字符串 被改变了。那么为什么这个程序在输入 test
时打印 okay
。
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");
}
}
}