【Java】 子字符串的比較(substring的==與equal()使用)

   

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
View Code

 

爲何只有第三個的結果爲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

相關文章
相關標籤/搜索