自動拆箱
3.short類
自動拆箱
4.byte類
自動拆箱
5.character類
自動拆箱
**
public
static
void
main
(string[
] args)
使用反編譯工具反編譯後:
可以看出,long的自動裝箱都是通過long.valueof()方法來實現的,long的自動拆箱都是通過long.lon**alue()來實現的。
valueof()
public
static long valueof
(long l)
//否則直接new乙個long型別物件
return
newlong
(l);
}
longcache
//起到乙個快取的作用,當裝箱的時候值在[-128,127]之間不用new,直接從快取中拿
private
static
class
longcache
//定義乙個名為cache的long型陣列,陣列的長度為256
static final long cache=
newlong[-
(-128)
+127+1
];//這是乙個靜態**塊,不明白可以學習我的另一篇文件,最後有鏈結
static
}
**
public
class
demo
}
結果
true
false
分析,因為100的時候自動裝箱都是從快取中拿的,記憶體位址當然一樣,而200的時候都是新new的記憶體位址不一樣。
lon**alue()
public long lon**alue()
valueof()
public
static short valueof
(short s)
return
newshort
(s);
}
shortcache
private
static
class
shortcache
static final short cache=
newshort[-
(-128)
+127+1
];static
}
同理,偷懶,不分析了。
shortvalue()
public short shortvalue()
valueof()
public
static byte valueof
(byte b)
bytecache
private
static
class
bytecache
//定義乙個元素為byte型別的陣列,陣列名為cache,陣列長度為256
static final byte cache=
newbyte[-
(-128)
+127+1
];static
}
**
public
class
demo
}
結果
true
true
true
bytevalue()
public byte bytevalue()
valueof()
public
static character valueof
(char c)
//否則,new乙個character型別變數返回
return
newcharacter
(c);
}
bytecache
private
static
class
charactercache
static final character cache=
newcharacter
[127+1
];static
}
分析:同理,偷懶,不做說明了。
一模一樣,就是方法名不同。
自動裝箱與拆箱原始碼
裝箱就是自動將基本資料型別轉換為包裝器型別 拆箱就是自動將包裝器型別轉換為基本資料型別。總結裝箱和拆箱的實現過程 裝箱過程是通過呼叫包裝器的valueof方法實現的,而拆箱過程是通過呼叫包裝器的 value方法實現的。代表對應的基本資料型別 先貼一道題 public class test 輸出結果是...
裝箱和拆箱,自動裝箱和自動拆箱
以integer的建立為例。裝箱 把基本資料型別轉換成包裝類物件 int integer integer num1 new integer 17 拆箱 把乙個包裝類的物件,轉換成基本型別的變數 integer int int num2 num1.intvalue 自動裝箱 integer num3 ...
自動裝箱和拆箱
概念 裝箱就是自動將基本型別資料轉為包裝型別 拆箱就是自動將包裝型別轉為基本型別。具體實現 自動裝箱 integer total1 99 編譯後 integer total integer.valueof 99 自動拆箱 int total2 total1 編譯後 int total2 total1...