在我们重写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。