Java源码系列(21) -- Number

Posted by phantomVK on January 2, 2019

类定义

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

1
public abstract class Number implements java.io.Serializable

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

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

方法

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 把指定数值按照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();
}