public class Test { public static void main(String[] args) { String str1="good"; System.out.println(str1=="good"); System.out.println(str1.equals("good")); //============================== String str2="goodjob"; System.out.println(str2.substring(0, 4)=="good"); System.out.println(str2.substring(0, 4).equals("good")); } }
true true false true
爲何只有第三個的結果爲false呢?html
首先弄清楚String類型的「==」和「equal」方法的區別。「==」比較的是內存地址,而「equal」比較的是內容。因此採用」equal「方法的第二和第四個判斷輸出爲」true「。java
對於String st'r1 = "good"; 這樣申明的字符串對象,其值就是存儲在常量池中。當咱們建立String st'r1 = "good"這樣一個對象以後,"good"就存儲到了常量池(也可叫作字符串池)中,當比較 str1=="good" 時,Java底層會優先在常量池中查找是否存在"good",存在則不會建立新的」good「,所以str1和"good"的地址相同,str1=="good"爲true。ide
對於str2.substring(0, 4),雖然子字符串也爲「good」,可是這個操做是新建了一個字符串,因此str2.substring(0, 4)的地址與」good「的地址不一樣,從而str2.substring(0, 4)=="good"爲false。spa
更多:【Java】 String類型的==使用3d