getClass與instanceof 的區別

在我們重寫equals,判斷類型是否一致時會用到getClass或者instanceof,那麼他們的區別是什麼呢,今天就做個筆記吧,示例代碼如下:

public class EqualsTest{ 
 public static void main(String[] args) {
     

 A a = new A();
        B b = new B();
        
        A aa = new B();

        System.out.println(b.getClass() == a.getClass());
        System.out.println(b.getClass().equals(a.getClass()));
        System.out.println(aa.getClass.toString());
        System.out.println(aa.getClass() == a.getClass());
        System.out.println(aa.getClass().equals(a.getClass()));

        System.out.println(b instanceof A);

    }
}
class A{}
class B extends A{}

打印結果依次爲:
false
false
class com.jd.wj.man.service.utils.B
false
false
true

解釋

getClass:官方解釋Returns the runtime class of this Object意思是返回的運行時類型,因此它不考慮繼承,僅判斷引用指向的具體類型

instanceof:比較的是繼承關係或者實現關係類的類型,子類對象或者實現類對象放在前面

他們的應用場景也是一目瞭然,如果嚴格要求同類型時可以用getClass。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章