在我們重寫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。