Я недавно прочитал о const
ключевом слове, и я так растерялся! Я не могу найти никакой разницы между const
и val
ключевое слово, я имею в виду , мы можем использовать оба из них , чтобы сделать неизменяемую переменную, есть что - нибудь еще , что я не хватает?
276
Ответы:
const
s - константы времени компиляции. Это означает, что их значение должно быть назначено во время компиляции, в отличие отval
s, где это может быть сделано во время выполнения.Это означает, что
const
s никогда не может быть назначен функции или любому конструктору класса, но только aString
или примитиву.Например:
источник
const val foo = "Hello world"
аval bar = "Hello world"
? Они одинаковы?const
значения будут полностью встроены во время компиляции.const val
а не простоconst
? Мне кажется, чтоval
ключевое слово в данном контексте совершенно излишне, так какconst var
было бы абсурдно.const val
,const
является модификатором,val
а не ключевым словом. Модификаторы> ключевые слова. Другие примеры такого же конструкции являются,annotation/enum/data class
,private val
,inline fun
и т.д.Просто чтобы добавить к ответу Луки:
Источник: Официальная документация
источник
Вы можете преобразовать Kotlin в Java. Тогда вы можете увидеть, что const имеет еще один статический модификатор, чем val . Простой код, подобный этому.
Котлин:
На Яву (Часть):
источник
const
удалить, приведет ли это к другому файлу Java?Оба
val
иconst
неизменны.const
используется для объявления констант времени компиляции, тогда какval
для констант времени исполнения.источник
Const Kotlin для Java
Валь Котлин на Яву
Простым языком
Пример 1-
Это потому, что getCar () оценивается во время выполнения и присваивает значение Car.
Дополнительно -
источник
В Котлин,
const
иval
как представляет собой неизменность и только для чтения значения и действуют в качествеfinal
ключевого слова в Java.val
ключевое слово должно использоваться для объявления значений времени выполнения иconst
ключевое слово должно использоваться для объявления значений времени компиляции.Имейте в виду, const должен использоваться только с примитивными типами данных, а не для функций и конструкторов.
источник