包裝類自動裝箱和拆箱原理

2021-10-02 02:39:50 字數 2041 閱讀 7317

包裝類的自動裝箱和拆箱是jdk1.5的新特性

一.首先:了解自動裝箱的過程

有兩種自動裝箱過程

第一種 (-128~127)之內 呼叫相應包裝類的valueof()

例如:integer i = 12; integer a = 23;

這些過程由jdk 編譯器自動裝箱完成的 即 會自動呼叫 integer.valueof() 方法

上面實際為: integer i = integer.valueof(12); integer a = integer.value(23);

其實在該範圍之內,底層中是通過陣列存的值,當在該範圍內再一次定義相同大小的值,如12,jdk它會在相應的陣列裡找到該值是不是存在,如存在則陣列裡存有12,則把它的引用給該物件,所以它們的位址是相等的.

例如:integer a = 20; integer b = 20;

system.out.

println

(b==a)

;//true

第二種 不在(-128~127)之內 直接 new 物件

例如: integer i = 200; integer a = 200;

實際為: integer i = new integer(200); integer a = new integer(200);

system.out.println(i==a);//false

注意:只要他們的實際值相同(基本型別數值) ,則它們的hashcode相等

二.自動拆箱的過程

自動拆箱是指將包裝類的型別直接賦值給對應的基本資料型別的變數;

例如: integer i = 100; int a = i;

實際上底層呼叫了相應的***value()方法: integer i = 100; int a = i.intvalue();

在包裝類進行與基本資料型別比較時 ,會存在自動拆箱的操作。

integer in = 400;

int i = 400;

// 當包裝類和對應的基本型別在運算的時候會進行自動拆箱

system.out.println(in == i);//true

nan

// nan是唯一的乙個值

// nan與任何東西都不相等,包括自己本身

// system.out.println(double.nan == double.nan);//false

system.out.println(double.isnan(5.8 / 4.32));//false

system.out.println(double.isnan(0.0/0));//true

nan 是什麼?

nan 屬性代表乙個「不是數字」的值。這個特殊的值是因為運算不能執行而導致的,不能執行的原因要麼是因為其中的運算物件之一非數字(例如, 「abc」 / 4),要麼是因為運算的結果非數字(例如,除數為零)。

雖然這看上去很簡單,但 nan 有一些令人驚訝的特點,如果你不知道它們的話,可能會導致令人頭痛的bug。

首先,雖然 nan 意味著「不是數字」,但是它的型別,不管你信不信,是 number:

console.log(typeof nan === "number");  // logs "true"
此外, nan 和任何東西比較——甚至是它自己本身!——結果是false:

console.log(nan === nan);  // logs "false"
一種半可靠的方法來測試乙個數字是否等於 nan,是使用內建函式 isnan(),但即使使用 isnan() 依然並非是乙個完美的解決方案。

乙個更好的解決辦法是使用 value !== value,如果值等於nan,只會產生true。另外,es6提供了乙個新的 number.isnan() 函式,這是乙個不同的函式,並且比老的全域性 isnan() 函式更可靠。

包裝類,自動裝箱與拆箱

int 整型 2147483648 2147483647 short 短整型 32768 32767 byte 位 128 127 long,boolean,byte,double,float 包裝類針對基本資料型別的物件轉換而實現的,如果要將基本資料型別以類的形式進行處理,那麼就要進行包裝 裝箱 ...

裝箱和拆箱,自動裝箱和自動拆箱

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