在java中,==兩端的變數如果賦值都為基本數據類型,那麼它比較的是兩邊的值是否相等;如果==兩端的變數指向的都是引用類型的對象,那麼它比較的將是兩端變數指向的對象地址是否相同(研究過Integer類代碼的小伙伴們應該啊知道,若兩個Integer類型的變數進行比較,如果它們的值在-128到127之間 ...
在java中,==兩端的變數如果賦值都為基本數據類型,那麼它比較的是兩邊的值是否相等;如果==兩端的變數指向的都是引用類型的對象,那麼它比較的將是兩端變數指向的對象地址是否相同(研究過Integer類代碼的小伙伴們應該啊知道,若兩個Integer類型的變數進行比較,如果它們的值在-128到127之間,Integer類是直接返回儲存於數組中的基本數據類型的數據給變數的,因此若兩個值相等,則==返回true;而如果不在這個範圍內,那麼Integer類中返回的將是new Integer(數值),即一個新對象,所以這時候將是比較兩端變數指向的對象地址是否一致)。當然,==兩端的變數類型應該一致或者是能夠相互轉換的,否則編譯器會報錯。
而equals比較的是引用類型的數據(若equals兩端放基本數據類型,編譯器將會報錯,這也說明瞭基本數據類型並沒有equals方法),分兩種情況:首先,Object類中的equals方法比較的也是兩個引用類型對象的記憶體地址是否一致;其次,對於String、Integer、Long等最終類,它們內部重寫了equals方法,因此比較的是對象的值是否相同;若你自己寫了一個類,如果你想實現自己的比較邏輯,你也可以通過重寫Object類中的equals方法來實現。當然最後還要註意一點,重寫的equals方法先比較的是對象類型,類型相同才會比較對象裡面的值!
以上就是java中==和equals的區別和相同之處。