Java基礎系列--instanceof關鍵字

原創做品,能夠轉載,可是請標註出處地址:http://www.cnblogs.com/V1haoge/p/8492158.htmlhtml

  instanceof關鍵字是在Java類中實現equals方法最常使用的關鍵字,表示其左邊的對象是不是右邊類型的實例,這裏右邊的類型能夠擴展到繼承、實現結構中,能夠是其真實類型,或者真實類型的超類型、超接口類型等。java

  instanceof左邊必須是對象實例或者null類型,不然沒法經過編譯。ide

  instanceof右邊必須是左邊對象的可轉換類型(可強轉),不然沒法經過編譯。this

  使用實例:spa

 1     interface IFather1{}  2     interface ISon1 extends IFather1{}  3     class Father1 implements IFather1{}  4     class Son1 extends Father1 implements ISon1{}  5     public class InstanceofTest {  6         public static void main(String[] args){  7             Father1 father1 = new Father1();  8             Son1 son1 = new Son1();  9             System.out.println(son1 instanceof IFather1);//1-超接口 10             System.out.println(son1 instanceof Father1);//2-超類 11             System.out.println(son1 instanceof ISon1);//3-當前類 12             System.out.println(father1 instanceof IFather1);//4-超接口 13             System.out.println(father1 instanceof ISon1);//false 14  } 15     }

  執行結果爲:code

true
true
true
true
false
View Code

  如上實例所示:除了最後一個,前四個所有爲true,查看類的繼承關係以下:htm

  

  能夠明顯看到,Son1類是最終的類,其對象son1能夠instanceof上面全部的接口和類(IFather一、ISon一、Father一、Son1),而Father1的實例father1上級只有IFather1接口和本類Father1能instanceof,其他均沒法成功。對象

  這樣咱們就能理解instanceof的用途了,最後說說其在equals中的做用,咱們來看個簡單的equals實現(來自java.lang.String類):blog

 1     public boolean equals(Object anObject) {  2         if (this == anObject) {  3             return true;  4  }  5         if (anObject instanceof String) {  6             String anotherString = (String) anObject;  7             int n = value.length;  8             if (n == anotherString.value.length) {  9                 char v1[] = value; 10                 char v2[] = anotherString.value; 11                 int i = 0; 12                 while (n-- != 0) { 13                     if (v1[i] != v2[i]) 14                             return false; 15                     i++; 16  } 17                 return true; 18  } 19  } 20         return false; 21     }

  明顯在第5行使用到了instanceof關鍵字,其目的就是爲了判斷給定的參數對象是不是String類的實例。區別於getClass()方法,後者獲得的是當前對象的實際類型,不帶繼承關係。繼承

1  System.out.println(son1.getClass()); 2         System.out.println(father1.getClass());

  結果爲:

class Son1 class Father1
View Code

 

參考:Java關鍵字——instanceof

相關文章
相關標籤/搜索