【发布时间】:2013-07-08 11:13:29
【问题描述】:
我有一些奇怪的字符串池行为的问题。
我正在使用== 比较相等的字符串,以确定它们是否在池中。
public class StringPoolTest {
public static void main(String[] args) {
new StringPoolTest().run();
}
String giveLiteralString() {
return "555";
}
void run() {
String s1 = giveLiteralString() + "";
System.out.println("555" == "555" + "");
System.out.println(giveLiteralString() == giveLiteralString() + "");
}
}
输出是:
true
false
这对我来说是一个很大的惊喜。有人可以解释一下吗?
我认为这在编译时正在发生。但是为什么将"" 添加到字符串中会产生任何影响呢?
【问题讨论】:
-
@MarkoTopolnik 在我看来是一样的。
-
@MarkoTopolnik 我知道问题略有不同。但答案总是像“XXX 是编译时常量,而 YYY 不是”。不过,也许我选错了问题。
-
@johnchen902 我同意,但是您将错误的问题发布为重复 :-)
-
您真的要比较引用或返回的字符串吗?
-
@MareInfinitus 是的,为什么不呢?它比使用 equals 进行比较要快得多。当然,您必须确保所有字符串都在池中(例如,通过
intern())。