TGViewer
Android under the hood Android under the hood @android_under_the_hood · 1.53K subscribers
Post #135 1.51K
val vs var под капотом.

На уровне Kotlin все просто:
val x = 10
var y = 20

y = 30 // компилятор разрешает
x = 30 // компилятор запрещает


Если глянуть глубже, на уровне JVM, то там ничего подобного вообще нет:
class Dessert {

val name = "Cake" // превратится в private final String name с getName() методом

var count = 0 // превратится в private int count c getCount() и setCount() методами

}

Ключевое слово final запрещает полю присваивать новое значение, это проверка реализована на уровне верификатора JVM, специальный компонент JVM который проверяет корректность команд байт-кода, очень важная штука для безопасного выполнения кода.

Локальные переменные проверяются только на уровне Kotlin компилятора:
val x = 10 // В JVM байт-коде разрешены записи в такую переменную, но Kotlin компилятор не сгенерирует такой байт-код


C лямбдами поинтереснее:
var dessert = Dessert() // создается обертка ObjectRef, которая внутри хранит объект как element поле

val lambda = {
// под капотом будет objectRef.element = Dessert()
dessert = Dessert()
}

При создании лямбды ссылка на объект копируется, а это значит если в dessert присвоить другой объект, у лямбды будет ссылка на старый, поэтому var переменные оборачиваются в специальные классы ObjectRef, IntRef и тд.

Ну и вообще проверки Kotlin компилятора и JVM верификатора не означают что val переменные / поля нельзя изменить, всегда есть механизм рефлексии и вызов Си / C++ кода через JNI.
  • 👍 26
  • 🔥 7
More from @android_under_the_hood
  1. Oct 7, 2026Kotlin lambdas, часть II. Начиная с Kotlin 2.0 лямбды перестали напрямую компилироваться в…
  2. Oct 4, 2026Всем привет, хочу поделиться проектом, который запустил 1 октября — ЗдесьЯ. Это цифровая с…
  3. Oct 2, 2026Kotlin lambdas, часть I. До версии Kotlin 2.0 лямбды компилировались в анонимные классы, р…
  4. Sep 27, 2026Делегат свойства в Kotlin. В Kotlin есть конструкция, которой нет в JVM: var name by NameD…
  5. Sep 20, 2026Возвращение Прошло уже полгода с последней записи на канале. За это время в моей жизни про…
  6. Feb 5, 2026Пару фактов о Go, часть II. 4) Вместо Kotlin Nullability указатели как в С/C++, то есть об…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →