这篇Java教程基于JDK1.8。教程中的示例和实践不会使用未来发行版中的优化建议。
Numbers类
当使用数字时,大部分情况下会使用基本类型,比如:
int i = 500;
float gpa = 3.65f;
byte mask = 0xff;
然而,在有些情况下建议使用对象来代替基本类型,Java平台为每个基本类型都提供了与之对应的包装类。类会在对象中“包裹”基本类型。大部分情况下,当需要对象类型时使用了基本类型,编译器会用该基本类型的包装类来完成装箱。同理,当需要基本类型时使用了对象类型,编译器会帮你完成拆箱。想获取更多信息,请参考 装箱和拆箱。
所有的数字包装类型都是抽象类 Number 的子类:
注意: 有4种Number 类的子类不会在这里讨论。BigDecimal 和 BigInteger 是为高精度运算准备的。AtomicInteger 和 AtomicLong 是为多线程应用准备的。
在这些情况下应该使用对象类型替代基本类型:
- 方法的参数期望传入对象时(当操作数字集合时经常使用)
- 使用类中定义的常量,比如:MIN_VALUE 和 MAX_VALUE,提供了该数据类型的最小和最大边界值
- 使用方法完成数值和基本类型之间转换,比如 和 字符串互转,数值系统之间转换(十进制数、十六进制数、二进制数)
下面的表格展示了Number 所有子类实现的实例方法:
方法 | 描述 |
---|---|
byte byteValue() short shortValue() int intValue() long longValue() float floatValue() double doubleValue() | 将Number 转换成基本类型 |
int compareTo(Byte anotherByte) int compareTo(Double anotherDouble) int compareTo(Float anotherFloat) int compareTo(Integer anotherInteger) int compareTo(Long anotherLong) int compareTo(Short anotherShort) | 对象与参数进行比较 |
boolean equals(Object obj) | 决定数字对象与参数是否相等 如果参数非空,与对象类型一致并且值也相等,那么返回 true Java API文档中描述了对Double 和Float 对象的一些额外要求 |
每个 Number 类型包含 数值与字符串互转,数值与其他数值系统互转的有用方法。下表列出了 Integer 类的这些方法。同理Number 类的其他子类也提供了类似方法。
方法 | 描述 |
---|---|
static Integer decode(String s) | 将字符串转换为integer。可接受十进制或十六进制的数字作为输入 |
static int parseInt(String s) | 返回integer |
static int parseInt(String s, int radix) | 返回integer,字符串描述可以是二进制、十进制和十六进制等 |
String toString() | 返回该 Integer 值的 String 对象 |
static String toString(int i) | 返回该integer的 String 对象 |
static Integer valueOf(int i) | 返回持有该integer同值的Integer对象 |
static Integer valueOf(String s) | 返回持有字符串描述值的Integer对象 |
static Integer valueOf(String s, int radix) | 返回持有字符串描述值的Integer对象,通过进制转换。比如 如果 s=“333”,radix=8,该方法返回8进制333等价的十进制数值 |