自動裝箱和拆箱原始碼分析JDK1 8(一)

2021-09-27 08:16:23 字數 2572 閱讀 2807

自動拆箱

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...