Byte
, Short
, Integer
, Long
, Float
和 Double
类类是数字包装类。
它们都继承自Number
抽象类。但是不能创建Number
类的对象。 但是,我们可以声明Number
类的引用变量。可以将六个数值包装类中的任何一个的对象引用分配给Number
类的引用。Number
类包含六个方法。 它们被命名为xxxValue()
,其中xxx
是六种基本数据类型之一(byte
,short
,int
,long
,float
和double
)。这些方法的返回类型与xxx
相同。
以下代码显示如何从数字包装器对象检索不同的原始数据类型值:
public class Main { public static void main(String[] args) { Integer intObj = Integer.valueOf(100); // Gets byte from Integer byte b = intObj.byteValue(); // Gets double from Integer double dd = intObj.doubleValue(); System.out.println("intObj = " + intObj); System.out.println("byte from intObj = " + b); System.out.println("double from intObj = " + dd); // Creates a Double object Double doubleObj = Double.valueOf("123.45"); // Gets different types of primitive values from Double double d = doubleObj.doubleValue(); float f = doubleObj.floatValue(); int i = doubleObj.intValue(); long l = doubleObj.longValue(); System.out.println("doubleObj = " + doubleObj); System.out.println("double from doubleObj = " + d); System.out.println("float from doubleObj = " + f); System.out.println("int from doubleObj = " + i); System.out.println("long from doubleObj = " + l); } }
上面的代码生成以下结果。
intObj = 100 byte from intObj = 100 double from intObj = 100.0 doubleObj = 123.45 double from doubleObj = 123.45 float from doubleObj = 123.45 int from doubleObj = 123 long from doubleObj = 123
在Java8在一些数值包装类(如Integer
,Long
,Float
和Double
)中添加了一些方法,如:sum()
,max()
和min()
。
例如,Integer.sum(10,20)
简单地返回10 + 20
的求值结果。
它们的引用使用集合lambda
表达式。包装器类处理包含原始值的字符串。
valueOf()
方法将字符串转换成包装器对象。parseXxx()
方法将字符串转换为原始值。Byte
, Short
, Integer
, Long
, Float
和 Double
类分别包含parseByte()
,parseShort()
,parseInt()
,parseLong()
,parseFloat()
和parseDouble()
方法将字符串解析为原始值。
以下代码是将包含二进制格式的整数的字符串转换为Integer
对象和int
值:
public class Main { public static void main(String[] args) { String str = "01111111"; int radix = 2; // Creates an Integer object from the string Integer intObject = Integer.valueOf(str, radix); // Extracts the int value from the string int intValue = Integer.parseInt(str, 2); System.out.println("str = " + str); System.out.println("intObject = " + intObject); System.out.println("intValue = " + intValue); } }
执行上面的示例代码,得到如下结果 -
str = 01111111 intObject = 127 intValue = 127
所有数值包装类都包含几个有用的常量。它们的MIN_VALUE
和MAX_VALUE
个常数表示最小值和最大值。它们还有SIZE
常数,其表示对应原始类型的变量占据的位的大小。
以下代码尝试将两个字符串解析为双精度(double
)值。
第一个字符串包含有效的double
值,第二个字符串包含无效的double
值。 当调用parseDouble()
方法来解析第二个字符串时,就会抛出NumberFormatException
。
public class Main { public static void main(String[] args) { String str1 = "123.45"; try { double value1 = Double.parseDouble(str1); System.out.println("value1 = " + value1); } catch (NumberFormatException e) { System.out.println("Error in parsing " + str1); } String str2 = "8B.99"; // An invalid double try { double value2 = Double.parseDouble(str2); System.out.println("value2 = " + value2); } catch (NumberFormatException e) { System.out.println("Error in parsing " + str2); } } }
执行上面的示例代码,得到如下结果 -
value1 = 123.45 Error in parsing 8B.99