web-dev-qa-db-ja.com

"const"と "val"の違いは何ですか?

私は最近constキーワードについて読みましたが、とても混乱しています。このキーワードとvalキーワードの間に違いはありません。両方を使用して不変の変数を作成できるということです。他に不足している点はありますか?

196
Mathew Hany

constsはコンパイル時定数です。実行時に設定できるvalsとは異なり、コンパイル時に値を割り当てる必要があるという意味です。

つまり、constsは関数やクラスコンストラクターには決して代入できず、Stringまたはプリミティブにのみ代入できます。

例えば:

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

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

ルカの答えに加えて:

コンパイル時定数

コンパイル時に値がわかっているプロパティは、const修飾子を使用してコンパイル時定数としてマークできます。そのような特性は、以下の要件を満たす必要があります。

このようなプロパティは注釈に使用できます。

出典: 公式文書

25
EPadronU

KotlinをJavaに変換することができます。そうすると、constvalよりもstatic修飾子がもう1つあることがわかります。こんな単純なコードです。

コトリン:

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