首先,Int
將根據其上下文映射到java int
/Integer
。如果Int
是一個通用參數,則其映射類型爲Integer
。否則,它是一個原始類型int
。例如:
val a:Int = 1
//final int a = 1; //mapped to java code
val numbers:List<Int> = asList(1,2,3)
//final List<Integer> numbers = asList(1, 2, 3); //mapped to java code
其次,拳擊的Int
到Int?
是相同的行爲的Java拳的int
到Integer
,例如:
val a:Int = 1 // int a = 1;
val b:Int? = a; // Integer b = a;
爲什麼盒裝整數不一樣?
這是因爲在該範圍[-128, 127]
Integer僅緩存值。上面的變量a
超出緩存範圍,它會爲每個裝箱創建一個新的Integer實例,而不是使用緩存的值。例如:
// v--- 1 is in cache range
val ranged: Int = 1
val boxedRanged1: Int? = ranged
val boxedRanged2: Int? = ranged
println(boxedRanged1 === boxedRanged2) //true
// v--- 128 is out of cache range
val excluded: Int = 128
val boxedExcluded1: Int? = excluded
val boxedExcluded2: Int? = excluded
println(boxedExcluded1 === boxedExcluded2) //false
雖然我不是100%肯定,我認爲'Int'是一樣的Java類'int'(基本),而''詮釋是一樣的'整數'(對象) – danielspaniol
爲什麼倒票?用戶明確表示,如果他/她認識錯誤,應引導他/她。我顯然沒有看到這個問題應該被投票的原因。 –
@danielspaniol也許我會讓你失望[這裏](https://stackoverflow.com/a/45144516/7607923),:) –