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