1. 程式人生 > >[轉]Set 裏的元素是不能重復的,那麽用什麽方法來區分重復與否呢?是用==還 是 equals()?它們有何區別?

[轉]Set 裏的元素是不能重復的,那麽用什麽方法來區分重復與否呢?是用==還 是 equals()?它們有何區別?

color boolean 大量 spa new 重寫 錯誤 默認 個人

Set 裏的元素是不能重復的,元素重復與否是使用 equals()方法進行判斷的。
equals()==方法決定引用值是否指向同一對象 equals()在類中被覆蓋,為的是當兩個
分離的對象的內容和類型相配的話,返回真值。

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
方法,由你自己寫代碼來決定在什麽情況即可認為兩個對象的內容是相同的

由上述可見:

總結如下:

==:

  基本類型:比較的是值是否相同

  引用類型:比較的是地址值是否相同

equals():

  引用類型:默認情況下,比較的是地址值,可進行重寫,比較的是對象的成員變量值是否相同

原文地址:https://www.cnblogs.com/ncl-960301-success/p/7631707.html

[轉]Set 裏的元素是不能重復的,那麽用什麽方法來區分重復與否呢?是用==還 是 equals()?它們有何區別?