Integer中 128,127 的面試題

2021-10-09 23:30:43 字數 1178 閱讀 9542

public

class

testthree

private

static

void

demo1()

}

上述**x與y作比較結果是true,而i與j比較則是false。

問題來了,同樣是數值一樣,為什麼他兩的結果不一樣呢?

關於上面的結果分析:查閱integer的原始碼,發現在其中有個成員內部類。

private

static

class

integercache

catch

( numberformatexception nfe)

} high = h;

cache =

newinteger

[(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()

}

在integer中定義的成員內部類integercache,將 -128 到 127 之間的每個數字先提前封裝成integer物件,並且快取起來。

integer x =

127;

integer y =

127;

integer i =

128;

integer j =

128;

將int型別的資料賦值給integer引用的時候,會發生自動裝箱,這時不是將每個int值都包裝成integer物件,而是先判斷當前需要包裝的int值在不在integercache快取的陣列中,如果有直接將快取陣列中的物件的位址賦值給程式中的x和y引用。但是128並不再快取中,所以每次裝箱都會重新封裝128為乙個新的物件。

Integer和Integer資料的大小比較

public class test else public class test1 else 通過測試發現,第乙個資料輸出i1 i2,第二個資料輸出i1 i2.原因是因為 在給integer賦值時,實際上是自動裝箱的過程,也就是呼叫了integer.valueof int 方法,當這個值大於等於 1...

verilog中的integer和reg的差別

integer型別也是一種暫存器資料型別,integer型別的變數為有符號數,而reg型別的變數則為無符號數,除非特別宣告為有符號數,還有就是integer的位寬為宿主機的字的位數,但最小為32位,用integer的變數都可以用reg定義,只是對於用於計數更方便而已。reg,integer,real...

Integer 中的快取類IntegerCache

題目 public class test 結果是 true false true可是為什麼呢?翻閱dk的原始碼,發現 public static integer valueof string s throws numberformatexception public static integer v...