Выбор ответа Senior Основы языка обновлено
Сравнение упакованных Int через ===
Вопрос
Что выведет код?
val a: Int? = 100
val b: Int? = 100
val c: Int? = 1000
val d: Int? = 1000
println("${a === b} ${c === d}")
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: true false. Переменные типа Int? хранятся как объекты Integer.
Варианты ответа
true truetrue falseправильный ответfalse falsefalse true
Разбор
Переменные типа Int? хранятся как объекты Integer. При упаковке JVM берёт объекты из кеша для значений от -128 до 127, поэтому две ссылки на 100 указывают на один объект и === даёт true. Для 1000 создаются разные объекты, и ссылочное сравнение даёт false (кеш можно расширить флагом JVM, но по умолчанию так). Вывод: для чисел всегда ==, оно сравнивает значения.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.