一個基本的問題,但有人可以請解釋我爲什麼對不起事先:Java的String平等例如
String s = "lo";
String str7 = "Hel" + s;
String str8 = "He" + "llo";
System.out.println("str7 == str8 is " + (str7 == str8));
輸出錯誤。 我認爲str7和str8都指向字符串池中的相同對象,因爲字符串是不可變的。
我錯了嗎? str7和str8都不在池中,而是在堆中?爲什麼?
如果結果確實是字符串池中的同一個不可變字符串,您能否給我提供一些字符串操作的示例?
PS:
String str9 = "He" +"llo";
System.out.println("str8 == str9 is " + (str9 == str8));
輸出真正
@RajithPemabandu:但問題是具體關於底層表示;使用'equals'是爲了避免這些細節。 –
str8 == str9的原因是編譯器優化 – Simon
相關:[比較字符串與==在Java中聲明爲最終](https://stackoverflow.com/questions/19418427/comparing-strings-with-which-are-聲明在java中) – Pshemo