本文研究的主要是java中instanceof與Class的等價性的相關問題,具體如下。
java 中的instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個實例。
實例1(instanceof)
接口Person
public interface Person {public void eat();}
實現類People
public class People implements Person {private int a=0; @Override public void eat() { System.out.println("======"+a); }}
子類xiaoming:
public class xiaoming extends People {private String name;@Overridepublic void eat() { System.out.println("+++++++++");}}
主函數
public static void main(String[] args) { People p=new People(); xiaoming x=new xiaoming(); System.out.println(p instanceof Person); System.out.println(p instanceof xiaoming); -----2 System.out.println(x instanceof Person); System.out.println(x instanceof People); }
注意:上面2處的代碼在編譯時不會報錯。
運行結果:
truefalsetruetrue
實例2
package com.test.class_obj;class Base {}class Derived extends Base {}public class FamilyVsExactType { static void test(Object x) { System.out.println("Testing x of type " + x.getClass().getSimpleName()); System.out.println("-----------------------------------------"); System.out.println("x instanceof Base " + (x instanceof Base)); System.out.println("x instanceof Derived " + (x instanceof Derived)); System.out.println("-----------------------------------------"); System.out.println("Base.isInstance(x) " + Base.class.isInstance(x)); System.out.println("Derived.isInstance(x) " + Derived.class.isInstance(x)); System.out.println("-----------------------------------------"); System.out.println("x.getClass() == Base.class " + (x.getClass() == Base.class)); System.out.println("x.getClass() == Derived.class " + (x.getClass() == Derived.class)); System.out.println("x.getClass().equals(Base.class)) " + (x.getClass().equals(Base.class))); System.out.println("x.getClass().equals(Derived.class)) " + (x.getClass().equals(Derived.class))); System.out.println("*****************************************"); System.out.println("*****************************************"); } public static void main(String[] args) { test(new Base()); test(new Derived()); }}
輸出內容如下:
Testing x of type Base-----------------------------------------x instanceof Base truex instanceof Derived false-----------------------------------------Base.isInstance(x) trueDerived.isInstance(x) false-----------------------------------------x.getClass() == Base.class truex.getClass() == Derived.class falsex.getClass().equals(Base.class)) truex.getClass().equals(Derived.class)) false**********************************************************************************Testing x of type Derived-----------------------------------------x instanceof Base truex instanceof Derived true-----------------------------------------Base.isInstance(x) trueDerived.isInstance(x) true-----------------------------------------x.getClass() == Base.class falsex.getClass() == Derived.class truex.getClass().equals(Base.class)) falsex.getClass().equals(Derived.class)) true**********************************************************************************Process finished with exit code 0
通過以上測試可以得出以下結論:
總結
以上就是本文關于java中instanceof與Class的等價性代碼示例的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
新聞熱點
疑難解答
圖片精選