這篇文章主要為大家展示了“java中instanceof與Class等價(jià)性的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“java中instanceof與Class等價(jià)性的示例分析”這篇文章吧。
成都創(chuàng)新互聯(lián)云計(jì)算的互聯(lián)網(wǎng)服務(wù)提供商,擁有超過13年的服務(wù)器租用、雙線服務(wù)器托管、云服務(wù)器、網(wǎng)站空間、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn),已先后獲得國(guó)家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)許可證。專業(yè)提供云主機(jī)、網(wǎng)站空間、域名申請(qǐng)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。具體如下。
java 中的instanceof 運(yùn)算符是用來在運(yùn)行時(shí)指出對(duì)象是否是特定類的一個(gè)實(shí)例。instanceof通過返回一個(gè)布爾值來指出,這個(gè)對(duì)象是否是這個(gè)特定類或者是它的子類的一個(gè)實(shí)例。
實(shí)例1(instanceof)
接口Person
public interface Person { public void eat(); }
實(shí)現(xiàn)類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; @Override public void eat() { System.out.println("+++++++++"); } }
主函數(shù)
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處的代碼在編譯時(shí)不會(huì)報(bào)錯(cuò)。
運(yùn)行結(jié)果:
true false true true
實(shí)例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()); } }
輸出內(nèi)容如下:
Testing x of type Base ----------------------------------------- x instanceof Base true x instanceof Derived false ----------------------------------------- Base.isInstance(x) true Derived.isInstance(x) false ----------------------------------------- x.getClass() == Base.class true x.getClass() == Derived.class false x.getClass().equals(Base.class)) true x.getClass().equals(Derived.class)) false ***************************************** ***************************************** Testing x of type Derived ----------------------------------------- x instanceof Base true x instanceof Derived true ----------------------------------------- Base.isInstance(x) true Derived.isInstance(x) true ----------------------------------------- x.getClass() == Base.class false x.getClass() == Derived.class true x.getClass().equals(Base.class)) false x.getClass().equals(Derived.class)) true ***************************************** ***************************************** Process finished with exit code 0
通過以上測(cè)試可以得出以下結(jié)論:
instanceof() 和 isInstance() 生成的結(jié)果相同
equals() 和 == 生成的結(jié)果相同
父類可以是子類的實(shí)例,但子類不可以是父類的實(shí)例
Class 對(duì)象比較時(shí),不考慮繼承
以上是“java中instanceof與Class等價(jià)性的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!