剛剛在瞭解“==”和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