2016-12-04 3 views
5

В документации мы имеемКотлин INT коробочный идентичность

Обратите внимание, что бокс чисел не сохраняет тождество

но следующие примеры дают разные результаты

val number1 = 127 
val b1 : Int? = number1 
val b2 : Int? = number1 
print(b1 === b2) // this prints true 

val number2 = 128 
val c1 : Int? = number2 
val c2 : Int? = number2 
print(c1 === c2) // this prints false 

В цифрах больше чем 127 работает как ожидалось, но не тогда, когда выше 128 (8 бит), почему?

ответ

8

Эта статья объясняет: http://javapapers.com/java/java-integer-cache/

Основная идея заключается в том, что стандартная Lib Java использует кэш для значений между -128 и 127, поэтому они всегда ссылаются на тот же объект Integer (по идентичности).

Смежные вопросы