В чем разница между "const" и "val"?

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

3 ответов


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

Это означает, что consts никогда не может быть присвоен функции или любому конструктору класса, а только 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;
   }
}