java中的自動裝箱與自動拆箱

2021-08-09 03:14:53 字數 3834 閱讀 8194

基本資料型別不是物件,沒有可以呼叫的方法,可以使用它的包裝型別來呼叫一些如tostring(),getclass()之類的方法。

如:integer i = 10;這時編譯器實際執行的是integer i = integer.valueof(10);

這就是自動裝箱。自動裝箱就可以把乙個基本資料型別子動變成乙個包裝型別。

使用反編譯軟體檢視:

自動拆箱跟自動裝箱相反,自動拆箱是把integer這樣的包裝型別重新簡化為基本資料型別。

如:int k = new integer(2);這時編譯器實際執行的是int k = new integer(2).intvalue();

這就是自動拆箱。使用反編譯軟體檢視:

在裝箱池指定的範圍內會有快取物件,加入是在範圍的值會直接取已有的快取物件,而不會new乙個。

例如:

public

static integer valueof(inti)

integer integer1 = 100;

integer integer2 = 100;

integer integer3 = 200;

integer integer4 = 200;

integer integer5 = new

integer(100);

integer integer6 = new

integer(100);

int int1 = 100;

int int2 = 200;

system.out.println("integer1==integer2: " + (integer1 == integer2));

//ture 自動裝箱,兩個快取中的integer物件的引用來進行比較,所以是true

system.out.println("integer1.equals(integer2): " + (integer1.equals(integer2)));

// true integer中對equals方法進行了重寫,比較的的是兩個物件的值是否相等,所以為true

system.out.println("integer3==integer4: " + (integer3 == integer4));

// false 自動裝箱,兩個非快取物件,而是new出來的不同物件的引用進行比較,所以為false

system.out.println("integer3>integer4: " + (integer3 > integer4));

// false 自動拆箱,再比較大小 ,明顯不成立

system.out.println("integer3.equals(integer4): " + (integer3.equals(integer4)));

// true integer中對equals方法進行了重寫,比較的的是兩個物件的值是否相等,所以為true

system.out.println("integer5==integer6: " + (integer5 == integer6));

// false 兩個不同的integer物件引用的比較肯定為false

system.out.println("integer5.equals(integer6): " + (integer5.equals(integer6)));

// true integer中對equals方法進行了重寫,比較的的是兩個物件的值是否相等,所以為true

system.out.println("integer1==int1: " + (integer1 == int1));

// true 將integer快取物件拆箱後與int比較,即兩個int型別進行比較,所以為true

system.out.println("integer1.equals(int1): " + (integer1.equals(int1)));

// true 重寫的equals方法中的方法引數是object型別,不能傳乙個基本資料型別的引數進去,所以發生了自動裝箱,

// int1被自動裝箱為integer型別,而integer型別的最終父類是object型別,然後就是兩個integer

// 型別進行equals比較

system.out.println("integer3==int2: " + (integer3 == int2));

// true integer物件拆箱後與int比較,所以為true

system.out.println("integer3.equals(int2): " + (integer3.equals(int2)));

// true 與倒3個輸出原理相同

使用反編譯檢視

integer integer1 = integer.valueof(100);

integer integer2 = integer.valueof(100);

integer integer3 = integer.valueof(200);

integer integer4 = integer.valueof(200);

integer integer5 = new integer(100);

integer integer6 = new integer(100);

int int1 = 100

; int int2 = 200

; system.out

.println("integer1==integer2: " + (integer1 == integer2));

system.out

.println("integer1.equals(integer2): " + integer1.equals(integer2));

system.out

.println("integer3==integer4: " + (integer3 == integer4));

system.out

.println("integer3>integer4: " + (integer3.intvalue() > integer4.intvalue()));

system.out

.println("integer3.equals(integer4): " + integer3.equals(integer4));

system.out

.println("integer5==integer6: " + (integer5 == integer6));

system.out

.println("integer5.equals(integer6): " + integer5.equals(integer6));

system.out

.println("integer1==int1: " + (integer1.intvalue() == int1));

system.out

.println("integer1.equals(int1): " + integer1.equals(integer.valueof(int1)));

system.out

.println("integer3==int2: " + (integer3.intvalue() == int2));

system.out

.println("integer3.equals(int2): " + integer3.equals(integer.valueof(int2)));

參考文章

java的自動裝箱與自動拆箱

什麼是自動裝箱拆箱 基本資料型別的自動裝箱 autoboxing 拆箱 unboxing 是自j2se 5.0開始提供的功能。一般我們要建立乙個類的物件的時候,我們會這樣 class a new class parameter 當我們建立乙個integer物件時,卻可以這樣 integer i 10...

Java 自動裝箱與拆箱

什麼是自動裝箱拆箱 基本資料型別的自動裝箱 autoboxing 拆箱 unboxing 是自j2se 5.0開始提供的功能。一般我們要建立乙個類的物件的時候,我們會這樣 class a newclass parameter 當我們建立乙個integer物件時,卻可以這樣 integer i 100...

Java 自動裝箱與拆箱

什麼是自動裝箱拆箱 基本資料型別的自動裝箱 autoboxing 拆箱 unboxing 是自j2se5.0開始提供的功能。一般我們要建立乙個類的物件的時候,我們會這樣 class a new class parameter 當我們建立乙個integer物件時,卻可以這樣 integer i 100...