JDK源碼解讀(第三彈:Number)

Number一聽就感覺是一個很基本很重要的類。但是平時我們經常使用Integer類的對象,Long類的對象,但是爲什麼不用Number類的對象呢。這是因爲java.lang.Number是一個抽象類,平時我們用的那些表示數值的類都是Number的子類。

看源碼之前建議先看一下API文檔,或者邊看源碼邊看API,這樣可以更好的理解。可以直接去看官方的API文檔,也可以看我的上一篇文章,是對API文檔的翻譯,連接如下:https://blog.csdn.net/lianjiww/article/details/82292398

看一下源碼:(去除了註釋)

package java.lang;

public abstract class Number implements java.io.Serializable {

    public abstract int intValue();

    public abstract long longValue();

    public abstract float floatValue();

    public abstract double doubleValue();

    public byte byteValue() {
        return (byte)intValue();
    }

    public short shortValue() {
        return (short)intValue();
    }

    private static final long serialVersionUID = -8742448824652078965L;
}

Number是一個抽象類,常用的那些數字類型如Integer,Long,Short,Float,Double,Byte,都是Number的子類。
這些子類由於不是抽象類,所以必須實現其父類,也就是Number類的所有抽象方法,即intValue(),longValue(),floatValue()和doubleValue()這四個方法。也就是說,子類必須提供將表示的數值轉換爲int、long、float、double的方法。
但爲何不需要實現轉換byte和short的方法呢?通過查看源碼,我們知道byteValue() 和shortValue() 不是抽象方法,不需要子類去實現,因爲這兩個方法都是通過調用intValue()在強制轉換成byte和short類型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章