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

Я недавно прочитал о ключевом слове const, и я так растерялся! Я не могу найти никакой разницы между 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. Такие свойства должны соответствовать следующим требованиям:

Такие свойства можно использовать в аннотациях.

Источник: Официальная документация

Ответ 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;
   }
}