Я недавно прочитал о ключевом слове const
, и я так растерялся! Я не могу найти никакой разницы между const
и ключевым словом val
, я имею в виду, что мы можем использовать оба из них для создания неизменяемой переменной, есть ли что-то еще, что я пропускаю?
В чем разница между "const" и "val"?
Ответ 1
const
- константы времени компиляции. Это означает, что их значение должно быть назначено во время компиляции, в отличие от val
s, где это можно сделать во время выполнения.
Это означает, что const
никогда не может быть назначена функции или любому конструктору класса, но только для String
или примитива.
Например:
const val foo = complexFunctionCall() //Not okay
val fooVal = complexFunctionCall() //Okay
const val bar = "Hello world" //Also okay
Ответ 2
Просто добавлю к Луке ответ:
Константы времени компиляции
Свойства, значение которых известно во время компиляции, могут быть помечены как константы времени компиляции с использованием модификатора const. Такие свойства должны соответствовать следующим требованиям:
- Верхний уровень или член объявления объекта или сопутствующего объекта.
- Инициализируется со значением типа String или типа примитива
- Нет пользовательского геттера
Такие свойства можно использовать в аннотациях.
Источник: Официальная документация
Ответ 3
Вы можете преобразовать Kotlin в Java. Затем вы можете видеть, что const имеет еще один статический модификатор, чем val. Простой код вроде этого.
Котлин:
const val str = "hello"
class SimplePerson(val name: String, var age: Int)
Для Java (Partion):
@NotNull
public static final String str = "hello";
public final class SimplePerson {
@NotNull
private final String name;
private int age;
@NotNull
public final String getName() {
return this.name;
}
public final int getAge() {
return this.age;
}
public final void setAge(int var1) {
this.age = var1;
}
public SimplePerson(@NotNull String name, int age) {
Intrinsics.checkParameterIsNotNull(name, "name");
super();
this.name = name;
this.age = age;
}
}