java除了八個原始數(shù)據(jù)鸭蛙,一切皆是對象川尖。Integer是int對應(yīng)的包裝類丐一,它有個int類型的字段存儲數(shù)據(jù)藻糖,并提供基本操作。
自動拆裝箱
自動裝箱就是Java自動將原始類型值轉(zhuǎn)換成對應(yīng)的對象库车,比如將int的變量轉(zhuǎn)換成Integer對象巨柒,這個過程叫做裝箱,反之將Integer對象轉(zhuǎn)換成int類型值,這個過程叫做拆箱洋满。
自動拆裝箱是一種語法糖晶乔,語法糖可以理解為java平臺為我們自動進(jìn)行了一些轉(zhuǎn)換,保證不同的寫法在運(yùn)行時等價牺勾,它們發(fā)生在編譯階段正罢,也就是生成的字節(jié)碼是一致的。
javac自動把裝箱轉(zhuǎn)換為Integer.valueOf(),吧拆箱替換為Integer.intValue()驻民,調(diào)用這兩個方法利用了緩存機(jī)制翻具,這個緩存放到了Integer的常量緩存中。這個默認(rèn)緩存是-128到127之間回还。調(diào)用的時候直接從緩存讀取
這種緩存機(jī)制裆泳,其他包裝類也有,比如:
Boolean:緩存了true/false對應(yīng)的實(shí)例懦趋,也就是Boolean.TRUE/FALSE
Short:緩存了-128到127之間的數(shù)值
Byte:數(shù)值有限晾虑,全部被緩存
在使用過程中要優(yōu)先使用基本數(shù)據(jù)類型,避免拆箱裝箱仅叫。