Integer自動裝箱超出賦值範圍

2021-08-02 22:45:38 字數 879 閱讀 4241

//在-128~127 之外的數

integer i1 =200;

integer i2 =200;

system.out.println("i1==i2: "+(i1==i2));

// 在-128~127 之內的數

integer i3 =100;

integer i4 =100;

system.out.println("i3==i4: "+(i3==i4));

結果為:

false;

true;

首先,i1,i2是integer類的例項,因此「==」比較的是兩個例項的記憶體位址。
因為整型的包裝類存在

常量池,

一次性把從-128到127之間的所有數都初始化了.當你使用這些數的時候不是建立新物件而是直接從這個常量池裡面取值.所以當你賦值100的時候是取的常量池裡的100,因此兩個物件

記憶體位址

一樣.而賦值200的時候兩個物件分別new物件,因此

記憶體位址

不同.

以下是integer源**的常量池實現:

private static class integercache 

high = h;

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

int j = low;

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

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

}private integercache(){}

}

Integer自動拆裝箱

integer a new integer 3 int b 3 integer c new integer 3 輸出 true system.out.println a b a b 輸出 false system.out.println a c a c 雖然包裝型別的變數是引用資料型別,但包裝類的例...

Integer自動拆箱 自動裝箱

package com.tmt.test code public class zhuangchaixiiangtest 這個的運算結果是什麼呢?new integer 128 int 128 true new integer 128 new integer 128 false integer 127...

Integer自動拆箱裝箱

integer a new integer 3 integer b 3 int c 3 system.out.println a b system.out.println a c 問題一 上面的輸出為啥?答案 false true 解答 第乙個是兩個引用之間的比較,他們沒有引用同一物件,所以為fal...