基本資料型別不是物件,沒有可以呼叫的方法,可以使用它的包裝型別來呼叫一些如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...