Jaka jest różnica między "const" a "val"?

Ostatnio czytałem o const słowo kluczowe, i jestem bardzo zdezorientowany! Nie mogę znaleźć żadnej różnicy między nim a słowem kluczowym val, chodzi mi o to, że możemy użyć obu z nich do stworzenia niezmiennej zmiennej, czy jest coś jeszcze, czego mi brakuje?

Author: James A Mohler, 2016-06-02

3 answers

constS są stałymi czasu kompilacji. Co oznacza, że ich wartość musi być przypisana podczas kompilacji, w przeciwieństwie do val s, gdzie można to zrobić w czasie wykonywania.

Oznacza to, że constS nigdy nie może być przypisana do funkcji lub konstruktora klasy, a jedynie do String lub prymitywu.

Na przykład:

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

const val bar = "Hello world"           //Also okay
 181
Author: Luka Jacobowitz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-07 15:06:49

Żeby dodać do odpowiedzi luki:

Stałe Czasu Kompilacji

Właściwości, których wartość jest znana w czasie kompilacji, mogą być oznaczone jako stałe czasu kompilacji przy użyciu modyfikatora const. Takie właściwości muszą spełniać następujące wymagania:

  • najwyższy poziom lub członek obiektu
  • inicjalizowana wartością typu String lub typem prymitywnym
  • No custom getter

Źródło: Oficjalne dokumentacja

 21
Author: EPadronU,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-03 14:48:23

Możesz przekształcić Kotlina w Javę. Następnie możesz zobaczyć constma jeszcze jeden staticmodyfikator niż val. Taki prosty kod.

Kotlin:

const val str = "hello"
class SimplePerson(val name: String, var age: Int)

Do Java(Część):

@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;
   }
}
 -2
Author: Jin Wang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-12 08:37:00