web-dev-qa-db-fra.com

Quelle est la difference entre "const" et "val"?

J'ai récemment lu sur le mot clé const, et je suis tellement confus! Je ne trouve aucune différence entre cela et le mot clé val. Je veux dire que nous pouvons utiliser les deux pour créer une variable immuable. Y a-t-il autre chose qui me manque?

208
Mathew Hany

consts sont des constantes de temps de compilation. Cela signifie que leur valeur doit être assignée pendant la compilation, contrairement à vals, où cela peut être fait à l'exécution.

Cela signifie que consts ne peut jamais être affecté à une fonction ou à un constructeur de classe, mais uniquement à une String ou à une primitive.

Par exemple:

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

const val bar = "Hello world"           //Also okay
288
Luka Jacobowitz

Juste pour ajouter à la réponse de Luka:

Constantes à la compilation

Les propriétés dont la valeur est connue au moment de la compilation peuvent être marquées en tant que constantes de compilation à l'aide du modificateur const. De telles propriétés doivent remplir les conditions suivantes:

De telles propriétés peuvent être utilisées dans les annotations.

Source: documentation officielle

27
EPadronU

Vous pouvez transformer le Kotlin en Java. Ensuite, vous pouvez voir que const a un plus statique modificateur que val. Le code simple comme ça.

Kotlin:

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

Pour Java (partie):

@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;
   }
}
12
Jin Wang