Я недавно прочитал о ключевое слово const
, и я так смущен! Я не могу найти никакой разницы между ним и ключевым словом val
, я имею в виду, что мы можем использовать их оба для создания неизменяемой переменной, есть ли что-нибудь еще, что мне не хватает?В чем разница между «const» и «val»?
ответ
const
s являются константами времени компиляции. Это означает, что их значение должно быть назначено во время компиляции, в отличие от val
s, где это можно сделать во время выполнения.
Это означает, что const
s никогда не может быть назначено функции или любому конструктору класса, но только для String
или примитива.
Например:
const val foo = complexFunctionCall() //Not okay
val fooVal = complexFunctionCall() //Okay
const val bar = "Hello world" //Also okay
Что-то вроде этого: 'const val foo =" Hello world "и' val bar = "Hello world" '? Они одинаковы? –
@MathewHany, по крайней мере, не в терминах байт-кода, см .: http://stackoverflow.com/questions/37482378/static-data-in-kotlin/37485356#37485356 – hotkey
Я думаю, что значения 'const' будут полностью полностью привязаны во время сборник. –
Просто, чтобы добавить к ответу Луки:
Compile-Time Константы
свойства, значение которого известно во время компиляции может быть помечено как константы времени компиляции с использованием модификатора const. Такие свойства должны удовлетворять следующим требованиям:
- верхнего уровня или элемента объекта
- инициализирован со значением типа String, или примитивного типа
- Нет пользовательских геттерного
Источник: Official documentation
https://kotlinlang.org/docs/reference/properties.html#compile-time-constants – Michael