В чем разница между "const" и "val"?
Я недавно прочитал о const
ключевое слово, и я так смущена! Я не могу найти никакой разницы между ним и val
ключевое слово, я имею в виду, что мы можем использовать оба из них, чтобы сделать неизменяемую переменную, есть ли что-нибудь еще, что мне не хватает?
3 ответов
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. Такие свойства должны соответствовать следующим требованиям:
- верхний уровень или член объекта
- инициализируется значением типа String или примитивным типом
- нет таможни геттер!--11-->
источник: официальная документация
Вы можете преобразовать Котлин в Java. Тогда вы можете видеть const еще один static модификатор, чем вал. Такой простой код.
Котлин:
const val str = "hello"
class SimplePerson(val name: String, var age: Int)
На Java (Часть):
@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;
}
}