當前位置:編程學習大全網 - 編程語言 - java如何比較字符串

java如何比較字符串

"=="和equals方法究竟有什麽區別?(這是我的個人總結,很詳細)

答:==操作符專門用來比較兩個變量的值是否相等,也就是用於比較變量所對應的內存中所存儲的數值是否相同,要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操作符。

如果壹個變量指向的數據是對象類型的,那麽,這時候涉及了兩塊內存,對象本身占用壹塊內存(堆內存),變量也占用壹塊內存,例如Objet obj = new Object();變量obj是壹個內存,new Object()是另壹個內存,此時,變量obj所對應的內存中存儲的數值就是對象占用的那塊內存的首地址。對於指向對象類型的變量,如果要比較兩個變量是否指向同壹個對象,即要看這兩個變量所對應的內存中的數值是否相等,這時候就需要用==操作符進行比較。

equals方法是用於比較兩個獨立對象的內容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個對象是獨立的。例如,對於下面的代碼:

String a=new String("foo");

String b=new String("foo");

兩條new語句創建了兩個對象,然後用a,b這兩個變量分別指向了其中壹個對象,這是兩個不同的對象,它們的首地址是不同的,即a和b中存儲的數值是不相同的,所以,表達式a==b將返回false,而這兩個對象中的內容是相同的,所以,表達式a.equals(b)將返回true。

在實際開發中,我們經常要比較傳遞進行來的字符串內容是否等,例如,String input = …;input.equals(“quit”),許多人稍不註意就使用==進行比較了,這是錯誤的,隨便從網上找幾個項目實戰的教學視頻看看,裏面就有大量這樣的錯誤。記住,字符串的比較基本上都是使用equals方法。

如果壹個類沒有自己定義equals方法,那麽它將繼承Object類的equals方法,Object類的equals方法的實現代碼如下:

boolean equals(Object o){

return this==o;

}

這說明,如果壹個類沒有自己定義equals方法,它默認的equals方法(從Object 類繼承的)就是使用==操作符,也是在比較兩個變量指向的對象是否是同壹對象,這時候使用equals和使用==會得到同樣的結果,如果比較的是兩個獨立的對象則總返回false。如果妳編寫的類希望能夠比較該類創建的兩個實例對象的內容是否相同,那麽妳必須覆蓋equals方法,由妳自己寫代碼來決定在什麽情況即可認為兩個對象的內容是相同的。

例:

public class compared {

public static void main(String[] args) {

String a = new String("info");

String b = new String("info");

//a和b是兩個不同的變量,而info是這兩個變量所只對象內存中所存放的值

String c = "info"; //這裏的info是變量c內存中存儲的值

String d = "info";

int e = 1;

int f = 1;

System.out.println(a.equals(b)); //true 比較的是a和b兩個對象中的內容是否壹樣

System.out.println(a == b); //false

System.out.println("-----------------");

System.out.println(c.equals(d)); //true

System.out.println(c == d); //true

System.out.println("-----------------");

System.out.println(e == f); //true

System.out.println("-----------------");

T t1 = new T(3,"aaa");

T t2 = new T(3,"bbb");

T t3 = new T(3,"aaa");

System.out.println(t1.equals(t2)); //false

System.out.println(t1.equals(t3)); //false

//為什麽都是false,因為我們沒有自定義equals方法,所以默認使用了Object的equals方法,而Object方法內部是使用==來比較的,因此此時妳比較的永遠都是兩個變量是否指向同壹對象,而這時都為新對象,所以為false。

}

}

疑問:String str = "...";啥意思?

  • 上一篇:如何生成二維碼
  • 下一篇:現在好多人都在提深度學習,深度學習課程前景好嗎?怎麽樣啊?
  • copyright 2024編程學習大全網