4.1介紹
將基本資料型別, 包裝成類 (變成引用資料型別)
作用:變成類, 就可以建立物件了,物件就可以呼叫方法方便的解決問題了
4.2基礎型別對應的包裝類
4.2.1分類
基本資料型別 | 引用資料型別 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
char | Character |
float | Float |
double | Double |
boolean | Boolean |
4.2.2如何進行包裝(用Integer舉例)
public Integer(int value) |
---|
public static Integer valueOf(int i) |
4.2.2.1手動裝箱
在 jdk5 以前,將基本資料型別轉換為包裝類需要我們手動。這裡以基本資料型別 int 轉換包裝類 Integer 為例。
int n1 = 100;
//手動裝箱 int -> Integer
Integer integer = new Integer(n1);
//或者 Integer integer = Integer.valueOf(n1);
4.2.2.2自動裝箱(JDK5)
在 jdk5 及以後,實現了自動裝箱工作。
int n2 = 200;
//自動裝箱
Integer integer2 = n2;//底層使用的是 Integer.valueOf(n2)
原理:在將一個基本資料型別的值賦給其對應的包裝類物件時,java會自動呼叫其中的valueof方法,該方法接收這個基本資料型別的值,然後建立一個該包裝類的物件並將這個值存進去,然後返回該物件
4.2.2.3手動拆箱
在 jdk5 以前,將包裝類轉換為基本資料型別需要我們手動。這裡以基本資料型別 Integer轉換包裝類 int 為例。
//這裡的integer是一個Integer物件
int a = integer.intValue();
4.2.2.4自動拆箱(JDK5)
在 jdk5 及以後,實現了自動拆箱工作。
//自動拆箱
int n3 = integer2;//底層使用的是 intValue()方法
自動拆箱:在將一個基本資料型別的值和其對應的包裝類物件進行運算時,java會自動呼叫xxxValue方法,將該物件轉化成對應基本資料型別的值
4.2.2.5結論
我們現在使用不需要在手動裝箱和拆箱,直接使用就可以
基本資料型別, 和對應的包裝類是可以直接在一起運算的。
4.2.3包裝類面試題
public static void main(String[] args) {
Integer i1 = 127;
Integer i2 = 127;
System.out.println(i1 == i2); //true
Integer i3 = 129;
Integer i4 = 129;
System.out.println(i3 == i4); //false
}
自動裝箱現象:
如果裝箱的資料, 在byte的取值範圍內 (-128~127),==號比較的結果就是true, 反之是false。
解釋原因:
Integer.valueOf();
Integer[] cache = {new Integer(-128), new Integer(-127) .... new Integer(126), new Integer(127)};
public static Integer valueOf(int i) { // 126
if (i >= -128 && i <= 127) {
return IntegerCache.cache[i + 128]; // 254
}
return new Integer(i);
}
參考:
Integer自動裝箱的時候會呼叫valueOf方法。方法的原始碼中, 會進行一個判斷, 判斷裝箱的資料是否在 -128~127之間:
在 : 會從底層的快取中取出物件進行使用。 不在 : 會建立出一個新的物件。
底層的快取實際上是一個Integer型別的陣列, 名字叫做cache, 內部儲存了 -128~127 之間所有的Integer物件。如果裝箱的資料在範圍中, 就會從快取中取出已有的物件使用, 避免建立太多重複的物件。
4.2.4常用方法
4.2.4.1Integer的常用方法
方法名 | 說明 |
---|---|
public static String toBinaryString(int i) | 得到二進位制 |
public static String toOctalString(int i) | 得到八進位制 |
public static String toHexString(int i) | 得到十六進位制 |
public static int parseInt(String s) | 將字串型別的整數轉成int型別的整數 |
4.2.4.1.1進位制轉化(瞭解即可)
private static void method() {
int number = 12;
System.out.println(Integer.toBinaryString(number));
System.out.println(Integer.toOctalString(number));
System.out.println(Integer.toHexString(number));
}
4.2.4.1.2parseInt
public static void main(String[] args) {
String s = "123";
System.out.println(Integer.parseInt(s) + 100); // 223
}
public static int parseInt(String s); 將傳入的字串轉換為數字。