刚刚在了解“==”和equals的异同,看到equals源码中的instanceof关键字,然后特地做个笔记
1. equals方法的源码新的理解:
public boolean equals(Object obj) {
if (obj instanceof Integer) { //如果object是integer的子类或者本身就是integer类,则表达式为true
return value == ((Integer)obj).intValue();
}
return false;
}
2.instanceof的作用:判断其左边对象是否为其右边类的实例,返回boolean类型的数据。可以用来判断继承中的子类的实例是否为父类的实现。
3.instanceof的用法:boolean result = object instanceof class
4.instanceof的结果:如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
5.实例:
public class Parent {
private int name;
public void run(){}
}
public class TestIns{
public static void main(String[] args) {
Son son = new Son();
Parent parent = new Parent();
// result = object instanceof class
boolean result1 = son instanceof Parent;//class是object的父类
boolean result2 = parent instanceof Parent;//class是自身类
boolean result3 = parent instanceof Son;//class是子类
System.out.println("result1="+result1);
System.out.println("result2="+result2);
System.out.println("result3="+result3);
}
}
class Son extends Parent{
}
6.结论:
编译时:class为object的父类,自身类,子类,编译均不会报错
运行时:class为object的父类,自身类时结果为true,class为object的子类时结果为false