包裝類

不比真如一相会發表於2024-03-21

4.包裝類

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); 將傳入的字串轉換為數字。

字串必須是數字字串 "123"。

相關文章