Java裝箱與拆箱詳解(附實例代碼)
本文是本站小編搜索整理的主要介紹Java 裝箱與拆箱詳解及實例代碼的相關資料,對java 的裝箱及拆箱進行了基本概念詳解及簡單使用,供參考學習,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網!
前言:
要理解裝箱和拆箱的概念,就要理解Java數據類型
裝箱:把基本類型用它們相應的引用類型包裝起來,使其具有對象的性質。int包裝成Integer、float包裝成Float
拆箱:和裝箱相反,將引用類型的對象簡化成值類型的數據
Integer a = 100; 這是自動裝箱 (編譯器調用的是static Integer valueOf(int i))
int b = new Integer(100); 這是自動拆箱
看下面一段代碼
m1
public class DataType {
public static void main(String args[]) {
DataType dt = new DataType();
dt.m11();
dt.m12();
}
public void m11() {
Integer a = new Integer(100);
Integer b = 100;
tln("m11 result " + (a == b));
}
public void m12() {
Integer a = new Integer(128);
Integer b = 128;
tln("m12 result " + (a == b));
}
}
打印結果是什麼?
m11 result false
m12 result false
“==”比較的是地址,而a和b兩個對象的地址不同,即是兩個對象,所以都是false
通過javap解析字節碼,內容如下
public void m11();
Code:
0: new #44; //class java/lang/Integer
3: dup
4: bipush 100
6: invokespecial #46; //Method java/lang/Integer."<init>":(I)V
9: astore_1
10: bipush 100
12: invokestatic #49; //Method java/lang/eOf:(I)Ljava/lang/In
teger;
15: astore_2
16: getstatic #53; //Field java/lang/:Ljava/io/PrintStream;
19: new #59; //class java/lang/StringBuilder
22: dup
23: ldc #61; //String m11 result
25: invokespecial #63; //Method java/lang/StringBuilder."<init>":(Ljava/la
ng/String;)V
28: aload_1
29: aload_2
30: if_acmpne 37
33: iconst_1
34: goto 38
37: iconst_0
38: invokevirtual #66; //Method java/lang/nd:(Z)Ljava/la
ng/StringBuilder;
41: invokevirtual #70; //Method java/lang/ring:()Ljava/l
ang/String;
44: invokevirtual #74; //Method java/io/tln:(Ljava/lang/St
ring;)V
47: return
public void m12();
Code:
0: new #44; //class java/lang/Integer
3: dup
4: sipush 128
7: invokespecial #46; //Method java/lang/Integer."<init>":(I)V
10: astore_1
11: sipush 128
14: invokestatic #49; //Method java/lang/eOf:(I)Ljava/lang/In
teger;
17: astore_2
18: getstatic #53; //Field java/lang/:Ljava/io/PrintStream;
21: new #59; //class java/lang/StringBuilder
24: dup
25: ldc #82; //String m12 result
27: invokespecial #63; //Method java/lang/StringBuilder."<init>":(Ljava/la
ng/String;)V
30: aload_1
31: aload_2
32: if_acmpne 39
35: iconst_1
36: goto 40
39: iconst_0
40: invokevirtual #66; //Method java/lang/nd:(Z)Ljava/la
ng/StringBuilder;
43: invokevirtual #70; //Method java/lang/ring:()Ljava/l
ang/String;
46: invokevirtual #74; //Method java/io/tln:(Ljava/lang/St
ring;)V
49: return
</init></init></init></init>
m2
public class DataType {
public static void main(String args[]) {
DataType dt = new DataType();
dt.m21();
dt.m22();
}
public void m21() {
Integer a = new Integer(100);
Integer b = new Integer(100);
tln("m21 result " + (a == b));
}
public void m22() {
Integer a = new Integer(128);
Integer b = new Integer(128);
tln("m22 result " + (a == b));
}
}
打印結果是
m21 result false
m22 result false
a和b仍是兩個對象
javap解析內容
public void m21();
Code:
0: new #44; //class java/lang/Integer
3: dup
4: bipush 100
6: invokespecial #46; //Method java/lang/Integer."<init>":(I)V
9: astore_1
10: new #44; //class java/lang/Integer
13: dup
14: bipush 100
16: invokespecial #46; //Method java/lang/Integer."<init>":(I)V
19: astore_2
20: getstatic #53; //Field java/lang/:Ljava/io/PrintStream;
23: new #59; //class java/lang/StringBuilder
26: dup
27: ldc #84; //String m21 result
29: invokespecial #63; //Method java/lang/StringBuilder."<init>":(Ljava/la
ng/String;)V
32: aload_1
33: aload_2
34: if_acmpne 41
37: iconst_1
38: goto 42
41: iconst_0
42: invokevirtual #66; //Method java/lang/nd:(Z)Ljava/la
ng/StringBuilder;
45: invokevirtual #70; //Method java/lang/ring:()Ljava/l
ang/String;
48: invokevirtual #74; //Method java/io/tln:(Ljava/lang/St
ring;)V
51: return
public void m22();
Code:
0: new #44; //class java/lang/Integer
3: dup
4: sipush 128
7: invokespecial #46; //Method java/lang/Integer."<init>":(I)V
10: astore_1
11: new #44; //class java/lang/Integer
14: dup
15: sipush 128
18: invokespecial #46; //Method java/lang/Integer."<init>":(I)V
21: astore_2
22: getstatic #53; //Field java/lang/:Ljava/io/PrintStream;
25: new #59; //class java/lang/StringBuilder
28: dup
29: ldc #86; //String m22 result
31: invokespecial #63; //Method java/lang/StringBuilder."<init>":(Ljava/la
ng/String;)V
34: aload_1
35: aload_2
36: if_acmpne 43
39: iconst_1
40: goto 44
43: iconst_0
44: invokevirtual #66; //Method java/lang/nd:(Z)Ljava/la
ng/StringBuilder;
47: invokevirtual #70; //Method java/lang/ring:()Ljava/l
ang/String;
50: invokevirtual #74; //Method java/io/tln:(Ljava/lang/St
ring;)V
53: return
m3
public class DataType {
public static void main(String args[]) {
DataType dt = new DataType();
dt.m31();
dt.m32();
}
public void m31() {
Integer a = 100;
Integer b = 100;
tln("m31 result " + (a == b));
}
public void m32() {
Integer a = 128;
Integer b = 128;
tln("m32 result " + (a == b));
}
}
打印結果
m31 result true
m32 result false
相關文章
-
Java自動裝箱與拆箱及其陷阱分析
Java中一個非常重要也非常有趣的特性,就是自動裝箱與拆箱,本文是本站小編搜索整理的關於Java自動裝箱與拆箱及其陷阱分析,給大家做個參考,希望對大家有所幫助!想了解更多相關信息請持續關注我們應屆畢業生考試網! 自動 -
Java實現在不同線程中運行的代碼實例詳解
在我們平凡的日常裏,說到作文,大家肯定都不陌生吧,作文可分爲國小作文、中學作文、大學作文(論文)。爲了讓您在寫作文時更加簡單方便,下面是小編爲大家收集的教師節的禮物作文,希望對大家有所幫助。教師節的禮物作文1美麗的 -
Java中的== 和equals()方法詳解與實例教程
Java中的== 和equals()方法有什麼區別呢?下面是由本站小編爲大家整理的Java中的== 和equals()方法詳解與實例教程,喜歡的可以收藏一下!瞭解更多詳情資訊,請關注應屆畢業生考試網!Java中的== 和equals()方法:Java中的數據類 -
java與javascript之間json格式數據互轉詳解
老師們、同學們:早上好!今天我們全體師生齊聚在這裏,迎來了新學年的新學期。俗話說,新學期,新氣象,在此,我真誠地希望全體師生在新學期有新風貌!新收穫!新的學期開啓新的希望,新的憧憬承載新的夢想。爲了讓我們的夢想能成爲現實 -
在Java中執行JavaScript代碼
我們要在Java中執行中的execute(s1,s2)方法,文件內容如下:function execute(s1, s2){ retu s1 + s2;}首先需要定義一個接口,這個接口中給出與要執行的JavaScript方法一樣的方法簽名,我們定義接口Methods,它的內容如下:/** * -
java構造函數實現代碼示例
複製代碼 代碼如下:public class TestCar {public static void main(String[] args) {Car c1 = new Car();r = "red";d = "xxx";//如果這輛汽車有很多屬性,這樣一一賦值不是很麻煩?有沒有辦法一生產出來就設定它的屬性( -
java中通用的線程池實例代碼
複製代碼 代碼如下:package Task;import ection;import or;/*** 任務分發器*/public class TaskManage extends Thread{protected Vectortasks = new Vector();protected boolean running = false;protected bool -
JavaScript實現的div拖動效果實例代碼
在js中要如何實現div拖動的效果,下面YJBYS小編爲你帶來實例的代碼實現段,希望對你有所幫助!js實現的div拖動效果實例代碼:div的拖動效果在很多效果中都有應用,當然還有很多附加的功能,本章節只是給拖動效果,並介紹一下它的 -
java證書的加密與解密代碼
java很多時候要對祕要進行持久化加密,此時的加密採用md5。採用對稱加密的時候就採用DES方法了,那麼java證書的加密與解密代碼是什麼呢?下面跟yjbys小編一起來學習一下吧! 以下兩個類可以很方便的完成字符串的加密和 -
java封裝產品異常的代碼
Java裏面的異常在真正工作中使用還是十分普遍的。什麼時候該拋出什麼異常,這個是必須知道的。當然真正工作裏面主動拋出的'異常都是經過分裝過的,自己可以定義錯誤碼和異常描述,以下是小編爲大家搜索整理的java封裝產品