有時, 需要将 int 這樣的基本類型轉換為對象。 所有的基本類型都冇一個與之對應的類。
例如,Integer 類對應基本類型 int。通常,這些類稱為包裝器 ( wrapper ) 這些對象包裝器類擁有很明顯的名字:Integer、Long、Float、Double、Short、Byte、Character 、Void 和 Boolean (前6 個類派生于公共的超類 Number)。對象包裝器類是不可變的,即一旦構造了包裝器,就不允許更改包裝在其中的值。同時, 對象包裝器類還是 final , 是以不能定義它們的子類。
假設想定義一個整型數組清單。而尖括号中的類型參數不允許是基本類型,也就是說,不允許寫成 ArrayList<int>。這裡就用到了 Integer 對象包裝器類。我們可以聲明一個 Integer對象的數組清單。
ArrayList<Integer> list = new ArrayList<>();
幸運的是, 有一個很有用的特性, 進而更加便于添加 int 類型的元素到 ArrayLis<lnteger>中。下面這個調用
list.add(3);
将自動地變換成
list.add (Integer.value0f(3));
這種變換被稱為自動裝箱(autoboxing)。
要注意:自動裝箱規範要求 boolean、byte、char 127, 介于 -128 ~ 127 之間的 short 和int 被包裝到固定的對象中。例如,如果在前面的例子中将 a 和 b 初始化為 100,對它們進行比較的結果一定成立。
public static void main(String[] args) throws Exception{
Integer a = 127;
Integer b = 127;
Integer a1 = 128;
Integer b1 = 128;
System.out.println(a == b); //true
System.out.println(a1 == b1); //false
}
最後強調一下,裝箱和拆箱是編譯器認可的,而不是虛拟機。編譯器在生成類的位元組碼時, 插人必要的方法調用。虛拟機隻是執行這些位元組碼。
int intValue( )
以 int 的形式傳回 Integer 對象的值(在 Number 類中覆寫了 intValue方法)。
下面是Integer類的常用方法:
static String toString(int i ) | 以一個新 String 對象的形式傳回給定數值 i 的十進制表示。 |
static String toString(int i ,int radix ) | 傳回數值 i 的基于給定 radix 參數進制的表示。 |
static int parselnt(String s) static int parseInt(String s,int radix) | 傳回字元串 s 表示的整型數值, 給定字元串表示的是十進制的整數(第一種方法,) 或者是 radix 參數進制的整數(第二種方法 。) |
static Integer valueOf(String s) Static Integer value Of(String s, int radix) | 傳回用 s 表示的整型數值進行初始化後的一個新 Integer 對象, 給定字元串表示的是十 進制的整數(第一種方法,)或者是 radix 參數進制的整數(第二種方法。) |
Number parse(String s) | 傳回數字值,假設給定的 String 表示了一個數值。 |
public static void main(String[] args) throws Exception{
Integer a = 127;
int a1 = a.intValue();
System.out.println(a1); //127
int b = 126;
String b1 = Integer.toString(b);
String b2 = Integer.toString(b,16);
System.out.println(b1); //126
System.out.println(b2); //7e
String c = "126";
int c1 = Integer.parseInt(c);
int c2 = Integer.parseInt(c,8);
System.out.println(c1); //126
System.out.println(c2); //86
String d = "127";
Integer d1 = Integer.valueOf(d);
Integer d2 = Integer.valueOf(d);
System.out.println(d1); //127
System.out.println(d2); //127
}