拆箱和裝箱 分析測試Integer

2021-10-08 07:29:09 字數 2591 閱讀 9932

(1)integer快取池

在 jdk8 中,integer 快取池可快取的數值範圍為-128 到 127。

(2)integer.valueof(***)的valueof分析

1. 引數為int

在申請乙個 [-128,127] 內的數時,其實是從 cache 中直接取出來用的,

如果不在這個範圍則是 new 了乙個 integer 物件

2.引數為string

關於parseint方法:

static int parseint(string s)   //預設轉化為10進製整型

static int parseint(string s, int radix) //轉化為radix進製整型

(3)integer建立的兩種方式

integer a = new integer(1);

integer b = new integer(1);

system.out.println(a==b); //false 建立物件的方式 兩個不同的記憶體位址

integer a1 = new integer(128);

integer b1 = new integer(128);

system.out.println(a1==b1); //false 建立物件的方式 兩個不同的記憶體位址

integer c = integer.valueof(123);

integer d = integer.valueof(123);

system.out.println(c==d); //true 從常量池中取的

integer c1 = integer.valueof(128);

integer d1 = integer.valueof(128);

system.out.println(c1==d1); //false 超過了127 則新例項化了乙個integer型別的物件 自動裝箱

(4)integer 的拆箱和裝箱

integer i3 = 1;// 當把乙個int型賦給乙個integer型時,引發編譯器自動裝箱,轉化為integer i3 = new integer(1);

i4 = new integer(1);// 由於基本型別無法指定物件,所以編譯器會自動拆箱,該條語句會轉換為:int i4 = new integer(1).intvalue();

(5)隱式/顯示型別轉換

高轉低    --------   顯示轉換

低轉高     --------   隱式轉換

(6)綜合及總結

int int1 = 12;

int int2 = 12;

integer integer1 = new integer(12);

integer integer2 = new integer(12);

integer integer3 = new integer(127);

integer a1 = 127;

integer a2 = 127;

integer a = 128;

integer b = 128;

system.out.println("int1 == int2 -> " + (int1 == int2)); // true 整型比較

system.out.println("int1 == integer1 -> " + (int1 == integer1)); // true int與integer比較

// integer自動拆箱 等價於第一組

system.out.println("integer1 == integer2 -> " + (integer1 == integer2)); // false 兩個物件 不會拆箱

//不同的記憶體位址

system.out.println("integer3 == a1 -> " + (integer3 == a1)); // false //等價於上一組

system.out.println("a1 == a2 -> " + (a1 == a2)); // true 從常量池中直接取引用

system.out.println("a == b -> " + (a == b)); // false 超過了127 需要new

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

以integer的建立為例。裝箱 把基本資料型別轉換成包裝類物件 int integer integer num1 new integer 17 拆箱 把乙個包裝類的物件,轉換成基本型別的變數 integer int int num2 num1.intvalue 自動裝箱 integer num3 ...

裝箱和拆箱

在c 中的有兩種型別的變數 值型別和引用型別。當值型別和引用型別相互轉化時,會發生裝箱和拆箱的過程。這裡有一點要宣告 經過拆箱或裝箱的物件會多出它自己乙份拷貝,如圖所示 從圖可以看出它和它的拷貝不在乙個儲存區域。這也是值型別和引用型別的區別所在。值型別總是在棧中,而引用型別總是在託管堆中。目前j2s...

裝箱和拆箱

裝箱 boxing 和拆箱 unboxing 是c 型別系統中重要的概念。它通過允許任何數值型別的資料被轉換為任何形式型別的物件提供了數值型別和引用型別間的緊密聯絡。裝箱和拆箱使得對在其中任何型別都可以最終被看作物件的型別系統的統一的觀察變為可能。裝箱轉換允許任何數值型別可以隱式地轉換為 objec...