Set 里的元素是不能重復(fù)的,元素重復(fù)與否是使用 equals()方法進(jìn)行判斷的。
equals()和==方法決定引用值是否指向同一對象 equals()在類中被覆蓋,為的是當(dāng)兩個(gè)分離的對象的內(nèi)容和類型相配的話,返回真值。
創(chuàng)新互聯(lián)公司"三網(wǎng)合一"的企業(yè)建站思路。企業(yè)可建設(shè)擁有電腦版、微信版、手機(jī)版的企業(yè)網(wǎng)站。實(shí)現(xiàn)跨屏營銷,產(chǎn)品發(fā)布一步更新,電腦網(wǎng)絡(luò)+移動網(wǎng)絡(luò)一網(wǎng)打盡,滿足企業(yè)的營銷需求!創(chuàng)新互聯(lián)公司具備承接各種類型的網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站項(xiàng)目的能力。經(jīng)過十年的努力的開拓,為不同行業(yè)的企事業(yè)單位提供了優(yōu)質(zhì)的服務(wù),并獲得了客戶的一致好評。
equals()和==的區(qū)別
==操作符專門用來比較兩個(gè)變量的值是否相等,也就是用于比較變量所對應(yīng)的內(nèi)存中所存儲的數(shù)值是否相同, 要比較兩個(gè)基本類型的數(shù)據(jù)或兩個(gè)引用變量是否相等,只能用==操作符。如果一個(gè)變量指向的數(shù)據(jù)是對象類型的,那么,這時(shí)候涉及了兩塊內(nèi)存, 對象本身占用一塊內(nèi)存(堆內(nèi)存),變量也占用一塊內(nèi)存,例如 Objet obj = new Object();變量 obj 是一個(gè)內(nèi)存,new Object()是另一個(gè)內(nèi)存,此時(shí),變量 obj 所對應(yīng)的內(nèi)存中存儲的數(shù)值就是對象占用的那塊內(nèi)存的首地址。對于指向?qū)ο箢愋偷淖兞?,如果要比較兩個(gè)變量是否指向同一個(gè)對象,即要看這兩個(gè)變量所對應(yīng)的內(nèi)存中的數(shù)值是否相等,這時(shí)候就需要用==操作符進(jìn)行比較。equals 方法是用于比較兩個(gè)獨(dú)立對象的內(nèi)容是否相同,就好比去比較兩個(gè)人的長相是否相同,它比較的兩個(gè)對象是獨(dú)立的。
例如,對于下面的代碼:
String a=new String("foo"); String b=new String("foo");
兩條 new 語句創(chuàng)建了兩個(gè)對象,然后用 a/b 這兩個(gè)變量分別指向了其中一個(gè)對象,這是兩個(gè)不同的對象,它們的首地址是不同的,即 a 和 b 中存儲的數(shù)值是不相同的,所以表達(dá)式 a==b 將返回 false,而這兩個(gè)對象中的內(nèi)容是相同的,所以,表達(dá)式 a.equals(b)將返回true。
在實(shí)際開發(fā)中,我們經(jīng)常要比較傳遞進(jìn)行來的字符串內(nèi)容是否等,例如, String input= …;input.equals(“quit”),許多人稍不注意就使用==進(jìn)行比較了,這是錯(cuò)誤的,隨便從網(wǎng)上找?guī)讉€(gè)項(xiàng)目實(shí)戰(zhàn)的教學(xué)視頻看看,里面就有大量這樣的錯(cuò)誤。記住,字符串的比較基本上都是使用 equals 方法。如果一個(gè)類沒有自己定義 equals 方法,那么它將繼承 Object 類的 equals 方法, Object 類的 equals 方法的實(shí)現(xiàn)代碼如下:
boolean equals(Object o){return this==o; }
這說明,如果一個(gè)類沒有自己定義 equals 方法,它默認(rèn)的 equals 方法(從 Object 類繼承的)就是使用==操作符,也是在比較兩個(gè)變量指向的對象是否是同一對象,這時(shí)候使用equals 和使用==會得到同樣的結(jié)果,如果比較的是兩個(gè)獨(dú)立的對象則總返回 false。如果你編寫的類希望能夠比較該類創(chuàng)建的兩個(gè)實(shí)例對象的內(nèi)容是否相同,那么你必須覆蓋 equals方法,由你自己寫代碼來決定在什么情況即可認(rèn)為兩個(gè)對象的內(nèi)容是相同的由上述可見,總結(jié)如下:
==:
基本類型:比較的是值是否相同
引用類型:比較的是地址值是否相同
equals():
引用類型:默認(rèn)情況下,比較的是地址值,可進(jìn)行重寫,比較的是對象的成員變量值是否相同