Java培訓解惑:== 和 equals有什么區(qū)別?
2022-01-02點擊量:142
==操作符專門用來比較兩個變量的值是否相等,也就是用于比較變量所對應的內(nèi)存中所存儲的數(shù)值是否相同,要比較兩個基本類型的數(shù)據(jù)或兩個引用變量是否相等,只能用==操作符。如果一個變量指向的數(shù)據(jù)是對象類型的,那么,這時候涉及了兩塊內(nèi)存,對象本身占用一塊內(nèi)存(堆內(nèi)存),變量也占用一塊內(nèi)存,例如Objetobj=newObject();變量obj是一個內(nèi)存,newObject()是另一個內(nèi)存,此時,變量obj所對應的內(nèi)存中存儲的數(shù)值就是對象占用的那塊內(nèi)存的首地址。對于指向?qū)ο箢愋偷淖兞浚绻容^兩個變量是否指向同一個對象,即要看這兩個變量所對應的內(nèi)存中的數(shù)值是否相等,這時候就需要用==操作符進行比較。equals方法是用于比較兩個獨立對象的內(nèi)容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個對象是獨立的。例如,對于下面的代碼:Stringa=newString("foo");Stringb=newString("foo");兩條new語句創(chuàng)建了兩個對象,然后用a,b這兩個變量分別指向了其中一個對象,這是兩個不同的對象,它們的首地址是不同的,即a和b中存儲的數(shù)值是不相同的,所以,表達式a==b將返回false,而這兩個對象中的內(nèi)容是相同的,所以,表達式a.equals(b)將返回true。在實際開發(fā)中,我們經(jīng)常要比較傳遞進行來的字符串內(nèi)容是否等,例如,Stringinput=…;input.equals(“quit”),許多人稍不注意就使用==進行比較了,這是錯誤的,隨便從網(wǎng)上找?guī)讉項目實戰(zhàn)的教學視頻看看,里面就有大量這樣的錯誤。記住,字符串的比較基本上都是使用equals方法。如果一個類沒有自己定義equals方法,那么它將繼承Object類的equals方法,Object類的equals方法的實現(xiàn)代碼如下:booleanequals(Objecto){returnthis==o;}這說明,如果一個類沒有自己定義equals方法,它默認的equals方法(從Object類繼承的)就是使用==操作符,也是在比較兩個變量指向的對象是否是同一對象,這時候使用equals和使用==會得到同樣的結(jié)果,如果比較的是兩個獨立的對象則總返回false。如果你編寫的類希望能夠比較該類創(chuàng)建的兩個實例對象的內(nèi)容是否相同,那么你必須覆蓋equals方法,由你自己寫代碼來決定在什么情況即可認為兩個對象的內(nèi)容是相同的。本文由培訓無憂網(wǎng)牛耳教育專屬課程顧問整理發(fā)布,更多Java培訓課程資訊歡迎關注培訓無憂網(wǎng)Java培訓頻道或添加老師微信:15033336050...