私はいくつかの奇妙な文字列プールの動作の質問を持っています。 私は==
を使用して、等しい文字列を比較して、プール内にあるかどうかを調べます。奇妙な文字列プールの振る舞い
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私にも同じように見えます。 – johnchen902
@ MarkoTopolnik私は質問が少し異なっていることを知っていた。しかし、答えは常に "XXXはコンパイル時定数ですが、YYYはそうではありません"のようです。しかし、間違った質問を選んだのかもしれません。 – johnchen902
@ johnchen902私は同意しますが、間違った質問を重複として投稿しました: – Thihara