Java數值型別包裝器


Byte, Short, Integer, Long, FloatDouble 類類是數位包裝類。
它們都繼承自Number抽象類。但是不能建立Number類的物件。 但是,我們可以宣告Number類的參照變數。可以將六個數值包裝類中的任何一個的物件參照分配給Number類的參照。
Number類包含六個方法。 它們被命名為xxxValue(),其中xxx是六種基本資料型別之一(byteshortintlongfloatdouble)。這些方法的返回型別與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在一些數值包裝類(如IntegerLongFloatDouble)中新增了一些方法,如:sum()max()min()

例如,Integer.sum(10,20)簡單地返回10 + 20的求值結果。

它們的參照使用集合lambda表示式。包裝器類處理包含原始值的字串。

  • 使用valueOf()方法將字串轉換成包裝器物件。
  • 使用parseXxx()方法將字串轉換為原始值。

Byte, Short, Integer, Long, FloatDouble 類分別包含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_VALUEMAX_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