java中instanceof與Class的等價(jià)性代碼示例
本文研究的主要是java中instanceof與Class的等價(jià)性的相關(guān)問(wèn)題,具體如下。
java 中的instanceof 運(yùn)算符是用來(lái)在運(yùn)行時(shí)指出對(duì)象是否是特定類的一個(gè)實(shí)例。instanceof通過(guò)返回一個(gè)布爾值來(lái)指出,這個(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
通過(guò)以上測(cè)試可以得出以下結(jié)論:
- instanceof() 和 isInstance() 生成的結(jié)果相同
- equals() 和 == 生成的結(jié)果相同
- 父類可以是子類的實(shí)例,但子類不可以是父類的實(shí)例
- Class 對(duì)象比較時(shí),不考慮繼承
總結(jié)
以上就是本文關(guān)于java中instanceof與Class的等價(jià)性代碼示例的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
SpringBoot集成Spring Data JPA及讀寫(xiě)分離
這篇文章主要介紹了SpringBoot集成Spring Data JPA及讀寫(xiě)分離的相關(guān)知識(shí),需要的朋友可以參考下2017-04-04
spring boot教程之產(chǎn)生的背景及其優(yōu)勢(shì)
這篇文章主要介紹了spring boot教程之產(chǎn)生的背景及其優(yōu)勢(shì)的相關(guān)資料,需要的朋友可以參考下2022-08-08
在Java8與Java7中HashMap源碼實(shí)現(xiàn)的對(duì)比
這篇文章主要介紹了在Java8與Java7中HashMap源碼實(shí)現(xiàn)的對(duì)比,內(nèi)容包括HashMap 的原理簡(jiǎn)單介紹、結(jié)合源碼在Java7中是如何解決hash沖突的以及優(yōu)缺點(diǎn),結(jié)合源碼以及在Java8中如何解決hash沖突,balance tree相關(guān)源碼介紹,需要的朋友可以參考借鑒。2017-01-01
Spring?Boot超大文件上傳實(shí)現(xiàn)秒傳功能
這篇文章主要介紹了Spring?Boot超大文件上傳實(shí)現(xiàn)秒傳功能,在實(shí)現(xiàn)分片上傳的過(guò)程,需要前端和后端配合,比如前后端的上傳塊號(hào)的文件大小,前后端必須得要一致,否則上傳就會(huì)有問(wèn)題,需要的朋友可以參考下2022-12-12
Java實(shí)現(xiàn)通訊錄管理系統(tǒng)項(xiàng)目
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)通訊錄管理系統(tǒng)項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11

