Java源码系列(21) -- Number

Posted by phantomVK on January 2, 2019

类定义

抽象类 Number 代表所有能从 数值型 转换到 基本类型 平台类的父类。这些基本类型包括 bytedoublefloatintlongshort

public abstract class Number implements java.io.Serializable

从特定 Number 实现的数值型到给定基本类型转换的特定语义,由所定义的 Number 实现定义。例如 DoubleNumber 的子类,转换到基本类型由 Double 的实现决定。

对于平台类来说,转换行为类似基本类型向下转换,或类似由 The Java™ Language Specification 定义的对基本类型之间范围扩大转换。因此,转换可能会丢失有关数值总大小的信息、失去原有精度,或返回不同于输入值正负号的结果。源码来自 JDK11

方法

此抽象类共定义了 4个抽象方法2个成员方法。这些抽象方法,需要由 Number 的子类实现,例如 DoubleFloat 等。通过这些方法,可按照指定基本类型获取值,但是获取值和实际值相比可能会丢失数值原有精度。

// 把指定数值按照int基本类型返回
public abstract int intValue();

// 把指定数值按照long基本类型返回
public abstract long longValue();

// 把指定数值按照float基本类型返回
public abstract float floatValue();

// 把指定数值按照double基本类型返回
public abstract double doubleValue();

// 把指定数值按照byte基本类型返回
public byte byteValue() {
    return (byte)intValue();
}

// 把指定数值按照short基本类型返回
public short shortValue() {
    return (short)intValue();
}