黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java判斷對象類型的方法

Java判斷對象類型的方法

更新時間:2022-12-21 12:15:16 來源:動力節(jié)點 瀏覽6118次

Java判斷對象類型的方法是什么?動力節(jié)點小編來告訴大家。

1.instanceof

關(guān)鍵字instanceof

不僅可以判斷對象是否是某個類的實例

甚至連該類繼承的基類和實現(xiàn)的接口也都能夠被識別為true

public static void main(String args[]) {
    Object i = new Integer(7);
    if (i instanceof Number) {
        System.out.println("Integer i is a Number");
    } else {
        System.out.println("Integer i isn't a Number");
    }
    if (i instanceof Serializable) {
        System.out.println("Integer i is a Serializable");
    } else {
        System.out.println("Integer i isn't a Serializable");
    }
    if (i instanceof Integer) {
        System.out.println("Integer i is an Integer");
    } else {
        System.out.println("Integer i isn't an Integer");
    }
    if (i instanceof Float) {
        System.out.println("Integer i is a Float");
    } else {
        System.out.println("Integer i isn't a Float");
    }
}

類定義為:

public abstract class Number implements java.io.Serializable {}
public final class Integer extends Number implements Comparable<Integer> {}

運行結(jié)果:

Integer i is a Number
Integer i is a Serializable
Integer i is an Integer
Integer i isn't a Float

根據(jù)結(jié)果可知:雖然instanceof在邏輯上沒有任何問題,是可以把Integer當(dāng)做一個Number來看來用,也當(dāng)做一個Serializable來看來用,但是這樣返回的結(jié)果就沒有針對性了,太過于模糊,如果僅僅需要i instanceof Integer為true該怎么做呢?

2.Class.equals

Java有一個叫做Class的類,這是一個用來描述類信息的類,我們?nèi)绻_判斷一個對象是否是具體的一個類的實例,可以這么做:

public static void main(String[] args) {
        Object i = new Integer(7);
        if (i.getClass().equals(Number.class)) {
            System.out.println("Integer i is a Number");
        } else {
            System.out.println("Integer i isn't a Number");
        }
        if (i.getClass().equals(Serializable.class)) {
            System.out.println("Integer i is a Serializable");
        } else {
            System.out.println("Integer i isn't a Serializable");
        }
        if (i.getClass().equals(Integer.class)) {
            System.out.println("Integer i is an Integer");
        } else {
            System.out.println("Integer i isn't an Integer");
        }
        if (i.getClass().equals(Float.class)) {
            System.out.println("Integer i is a Float");
        } else {
            System.out.println("Integer i isn't a Float");
        }
    }

運行結(jié)果:

Integer i isn't a Number
Integer i isn't a Serializable
Integer i is an Integer
Integer i isn't a Float

這樣就能達到我們的目的了,從equals函數(shù)上就可以看出,上述代碼是比較兩個類的類信息是否一致,全相等,這其中不考慮繼承父類、實現(xiàn)接口的關(guān)系,當(dāng)且僅當(dāng)該對象是要比較的那個類的實例才返回true。

查看源代碼發(fā)現(xiàn),equals函數(shù)用的就是Object中的方法,沒有重寫:

public boolean equals(Object obj) {
    return (this == obj);
}

由此可知:

無論我們用Integer實例化多少個對象,當(dāng)我們調(diào)用getClass()方法時返回的總是同一個類對象,即Integer.class。所以上面的i.getClass().equals(Number.class) 和 i.getClass == Number.class 是等價的。事實上每個類都會有且只有一個對應(yīng)Class的對象,我們正是用這個Class對象來實例化該類的所有對象的,也就是Class中的newInstance()方法。

如果想獲取更多有關(guān)于對象i的類型信息呢?比如獲取它的基類呢?Class的對象中還有些方法用于獲取父類、實現(xiàn)接口、類型名稱的方法:

獲取父類的類型信息:getSuperclass()

獲取實現(xiàn)的接口的類型信息:getInterfaces()

獲取類型名稱:getName()、getSimpleName()、getCanonicalName()

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 亚洲欧美另类在线视频 | 日韩免费视频播播 | 亚洲欧美另类综合 | 深夜福利在线播放 | 欧美一级α片 | 欧美在线一区二区三区不卡 | 天堂成人在线 | 精品一区二区在线欧美日韩 | free性欧美淫俄罗斯 | 老司机精品影院一区二区三区 | 久久久久国产一级毛片高清片 | 亚洲国产成人久久午夜 | 黄色免费网站在线播放 | 午夜极品| 波多野结衣在线中文字幕 | 免费a在线观看播放 | 黄色小视频在线看 | 涩涩资源站 | 500第一导航亚洲精品导航 | 中国黄色一级片 | 波多野结衣免费一区二区三区香蕉 | 干天天| 欧美日韩性视频一区二区三区 | 成人速播影院在线播放免费 | 国产成人亚洲精品91专区高清 | 一级做a爱过程免费视频高清 | 中日韩精品视频在线观看 | 午夜精品福利影院 | 欧美一级视 | 日本xxx在线播放 | 欧美国产日本精品一区二区三区 | 91短视频社区在线观看 | 人人人人草 | 午夜精品久久久久久久第一页 | 国产亚洲欧美日韩综合综合二区 | 久久久久久亚洲精品 | 夜间福利影院 | 五月激情小说网 | 香蕉视频网页版 | 日韩大片免费观看视频播放 | 中文字幕丝袜诱惑 |