天天看點

equals方法與==的差別

1、Object類中的equals方法

顯而易見,自定義的沒有重寫equals方法的類在使用equals方法時與==沒什麼差别

2、預定義類中的equals方法

預定義類中的equals方法大多都有自己的算法,如上是String類重寫後的equals方法,不僅包含了==的效果,還做了其他的操作,實作了比較字元的效果

 拓展

一、equals方法應具有以下特性

1.自反性:對于任何非空引用x,x.equals(x)應該傳回true。

2.對稱性:對于任何引用x和y,當且僅當y.equals(x)傳回true時,x.equals(y)傳回true。

3.傳遞性:對于任何引用x、y和z,如果x.equals(y)傳回true,y.equals(z)傳回true,x.equals(z)也應該傳回true。

4.一緻性:如果x和y引用的對象沒有發生變化,反複調用x.equals(y)應該傳回同樣的結果。

5.對于任意非空引用x,x.equals(null)應該傳回false。

二、instanceof關鍵字

如果用僞代碼描述:

例如 if( obj  instanceof  T )

如果obj不為空,并且轉換T類型不抛異常,則結果為true,否則為false

三、引用類型的強制轉換

子類可以非常自然地轉換成父類,但是父類轉換成子類則需要強制轉換,并且他們之間的強制類型轉換是有條件的。

如果父類引用的是子類對象,則可以成功強制轉換

如果父類引用的是他本身或者其他子類,就會報錯

參考連結:https://www.cnblogs.com/chenssy/p/3393160.html