Java中8種基本型別的封裝型別 自動裝箱和拆箱

2021-08-15 22:58:00 字數 1784 閱讀 9206

8種基本型別:char、byte、short、int、long、float、double、boolean。

對應各自的封裝型別。

以 integer 類為例,其他型別原理類似。

先看比較物件的 equals 方法的重寫:

public

boolean

equals(object obj)

return

false;

}

所以型別如果不一樣,那麼直接返回 false。

equals 方法重寫後,hashcode 也進行了重寫:

以 integer 為例,hashcode 返回結果就是基本型別的 int 值。

@override

public

inthashcode()

public

static

inthashcode(int value)

下面開始看自動裝箱和拆箱的原理。

直接賦值時,都會自動呼叫 valueof 方法。

integer 類中定義了 integercache,這個類中有 integer 陣列,該陣列已經快取了 -128~127 之間的所有 integer 物件。

private

static

class

integercache catch( numberformatexception nfe)

}high = h;

cache = new integer[(high - low) + 1];

int j = low;

for(int k = 0; k < cache.length; k++)

cache[k] = new integer(j++);

// range [-128, 127] must be interned (jls7 5.1.7)

assert integercache.high >= 127;

}private

integercache() {}

}

所以在 valueof 方法中,將 int 裝箱時,判斷如果在這個範圍中,直接返回物件,而不需要 new 這個新物件。

public

static integer valueof(int i)

然後看下邊的示例:

public

static

void

main(string args)

直接賦值時,都會自動呼叫 valueof 方法,而 12 是在 -128~127 之間的,所以快取中有其實例,兩個引用同乙個物件。而 200 超出了這個範圍,兩個物件都是 new 的新物件,兩個物件不是同乙個。

自動拆箱有個很典型的用法就是在進行運算的時候,因為物件時不能直接進行運算的,而是要轉化為基本資料型別後才能進行加減乘除。

看下邊的示例:

public

static

void

main(string args)

注意

character 類:快取 0~127 的字元,其它需要新建立。

byte,short,integer,long 類:快取 -128~127 的物件,其它值需要重新建立。

float,double 類:沒有快取,直接建立。

boolean 類:快取 true 和 false 兩個物件,直接賦值即可。

封裝類和基本型別

封裝類和基本型別的區別 1 封裝類可以呼叫屬性和方法,而基本型別不能。2 封裝類是引用型別。例如乙個集合list,只能往裡面新增物件,也就是object,封裝類就可以作為物件新增,而基本型別不行 基本型別只能按值傳遞,而每個基本型別對應的封裝類是按引用傳遞的 可以通過封裝類實現把string型別轉換...

Java 8種基本型別包裝類和String的常量池

通過如下 輸出可以看出常量池數值範圍為 128 127。integer i1 129 integer i2 129 system.out.println i1 i2 t i1 i2 i1 128 i2 128 system.out.println i1 i2 t i1 i2 i1 127 i2 12...

4 13 基本型別的類封裝

4.13 基本型別的類封裝 基本資料型別的封裝類 基本資料型別 double float byte int short long char boolean 基本資料型別的封裝 double float byte integer short long character 構造方法建立物件 double...