2016-06-02 5 views
60

Я недавно прочитал о ключевое слово const, и я так смущен! Я не могу найти никакой разницы между ним и ключевым словом val, я имею в виду, что мы можем использовать их оба для создания неизменяемой переменной, есть ли что-нибудь еще, что мне не хватает?В чем разница между «const» и «val»?

+0

https://kotlinlang.org/docs/reference/properties.html#compile-time-constants – Michael

ответ

85

const s являются константами времени компиляции. Это означает, что их значение должно быть назначено во время компиляции, в отличие от val s, где это можно сделать во время выполнения.

Это означает, что const s никогда не может быть назначено функции или любому конструктору класса, но только для String или примитива.

Например:

const val foo = complexFunctionCall() //Not okay 
val fooVal = complexFunctionCall() //Okay 

const val bar = "Hello world"   //Also okay 
+1

Что-то вроде этого: 'const val foo =" Hello world "и' val bar = "Hello world" '? Они одинаковы? –

+2

@MathewHany, по крайней мере, не в терминах байт-кода, см .: http://stackoverflow.com/questions/37482378/static-data-in-kotlin/37485356#37485356 – hotkey

+0

Я думаю, что значения 'const' будут полностью полностью привязаны во время сборник. –

9

Просто, чтобы добавить к ответу Луки:

Compile-Time Константы

свойства, значение которого известно во время компиляции может быть помечено как константы времени компиляции с использованием модификатора const. Такие свойства должны удовлетворять следующим требованиям:

  • верхнего уровня или элемента объекта
  • инициализирован со значением типа String, или примитивного типа
  • Нет пользовательских геттерного

Источник: Official documentation