1

数字

本节首先讨论java.lang包中的Number类,它的子类,以及使用这些类的实例化而不是原始数字类型的情况。

本节还介绍了PrintStreamDecimalFormat类,它们提供了编写格式化数字输出的方法。

最后,讨论了java.lang中的Math类,它包含数学函数,以补充语言中内置的运算符,该类具有三角函数,指数函数等方法。

数字类

使用数字时,大多数时候在代码中使用基元类型,例如:

int i = 500;
float gpa = 3.65f;
byte mask = 0xff;

但是,有理由使用对象代替基元,Java平台为每个基元数据类型提供包装类,这些类将基元“包装”在对象中。通常,包装由编译器完成 — 如果在需要对象的地方使用基元,编译器会在包装器类中为你封装基元,类似地,如果在期望基元时使用数字对象,则编译器会为你拆箱对象,有关更多信息,请参阅自动装箱和拆箱。

所有数字包装类都是抽象类Number的子类:

objects-numberHierarchy.gif

注意:这里没有讨论其他四个Number的子类,BigDecimalBigInteger用于高精度计算,AtomicIntegerAtomicLong用于多线程应用程序。

有三个原因可以使用Number对象而不是基元:

  1. 作为期望是对象的方法的参数(通常在操作数字集合时使用)。
  2. 使用由类定义的常量(如MIN_VALUEMAX_VALUE),它们提供数据类型的上限和下限。
  3. 使用类方法将值转换为其他基本类型或从其他基本类型转换值,转换为字符串和从字符串转换,以及在数字系统之间进行转换(十进制、八进制、十六进制、二进制)。

下表列出了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)
将此Number对象与参数进行比较。
boolean equals(Object obj)确定此数字对象是否等于参数。
如果参数不为null并且是相同类型且具有相同数值的对象,则方法返回true
Java API文档中描述了DoubleFloat对象的一些额外要求。

每个Number类都包含其他方法,这些方法可用于数字与字符串之间的转换和用于数字系统之间的转换,下表列出了Integer类中的这些方法,其他Number子类的方法类似:

方法描述
static Integer decode(String s)将字符串解码为整数,可以接受十进制、八进制或十六进制数字的字符串表示作为输入。
static int parseInt(String s)返回一个整数(仅十进制)
static int parseInt(String s, int radix)返回一个整数,给定十进制、二进制、八进制或十六进制(radix分别等于10、2、8或16)数字的字符串表示作为输入。
String toString()返回表示此Integer值的String对象。
static String toString(int i)返回表示指定整数的String对象。
static Integer valueOf(int i)返回包含指定基元值的Integer对象。
static Integer valueOf(String s)返回一个包含指定字符串表示形式值的Integer对象。
static Integer valueOf(String s, int radix)返回一个Integer对象,该对象包含指定字符串表示形式的整数值,并使用radix值进行解析。
例如,如果s = "333"radix = 8,则该方法返回等于八进制数333的十进制整数。

数字总结

你可以使用其中一个包装类 — ByteDoubleFloatIntegerLongShort — 来在对象中包装许多基本类型,Java编译器会在必要时自动为你包装(装箱)基元,并在必要时再将它们拆箱。

Number类包括常量和有用的类方法,MIN_VALUEMAX_VALUE常量包含该类型对象可包含的最小值和最大值,byteValueshortValue和类似方法将一种数字类型转换为另一种数字类型,valueOf方法将字符串转换为数字,toString方法将数字转换为字符串。

要格式化包含输出数字的字符串,可以使用PrintStream类中的printf()format()方法,或者,你可以使用NumberFormat类使用模式自定义数字格式。

Math类包含用于执行数学函数的各种类方法,包括指数、对数和三角函数方法,Math还包括基本算术函数,例如绝对值和舍入,以及用于生成随机数的方法random()


上一篇:抽象方法和类
下一篇:格式化数字打印输出

博弈
2.5k 声望1.5k 粉丝

态度决定一切