[constants] “const”와 “val”의 차이점은 무엇입니까?

최근에 const키워드 에 대해 읽었으며 혼란스러워합니다! 키워드 constval키워드의 차이점을 찾을 수 없습니다. 둘 다를 사용하여 변경 불가능한 변수를 만들 수 있습니다. 누락 된 것이 있습니까?



답변

consts 컴파일 시간 상수입니다. val런타임에 수행 할 수있는 s 와 달리 컴파일 시간 동안 해당 값을 할당해야 함을 의미 합니다.

즉, const함수 나 클래스 생성자에 s를 지정할 수 없으며 a String또는 primitive 에만 s를 지정할 수 없습니다 .

예를 들면 다음과 같습니다.

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

const val bar = "Hello world"           //Also okay


답변

Luka의 답변에 추가하기 만하면됩니다.

컴파일 타임 상수

컴파일 타임에 알려진 값은 const 한정자를 사용하여 컴파일 시간 상수로 표시 할 수 있습니다. 이러한 속성은 다음 요구 사항을 충족해야합니다.

이러한 속성은 주석에 사용될 수 있습니다.

출처 : 공식 문서


답변

Kotlin을 Java로 변환 할 수 있습니다. 그러면 const에 val 보다 정적 수정자가 하나 더 있음을 알 수 있습니다. . 이와 같은 간단한 코드.

코 틀린 :

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;
   }
}


답변

모두 valconst 불변입니다.

const컴파일 타임 상수를 선언하는 데 사용되는 반면 val런타임 상수는 선언 됩니다.

const val VENDOR_NAME = "Kifayat Pashteen"  // Assignment done at compile-time

val PICon = getIP()  // Assignment done at run-time


답변

const kotlin을 Java로

const val Car_1 = "BUGATTI" // final static String Car_1 = "BUGATTI";

val kotlin에서 Java로

val Car_1 = "BUGATTI"   // final String Car_1 = "BUGATTI";

간단한 언어로

  1. const 변수의 값은 컴파일 타임에 알려져 있습니다.
  2. val 값은 런타임시 상수를 정의하는 데 사용됩니다.

실시 예 1-

const val Car_1 = "BUGATTI"val Car_2 = getCar() ✔
const val Car_3 = getCar()//Because the function will not get executed at the compile time so it will through error

fun getCar(): String {
    return "BUGATTI"
}

getCar ()는 런타임에 평가되어 그 값을 Car에 할당하기 때문입니다.

또한-

  1. val 은 읽기 전용이며 런타임에 알려진 불변입니다.
  2. 런타임에 알려진 var 는 변경 가능
  3. const 는 불변이며 컴파일 타임에 알려진 변수

답변

kotlin에서 const그리고 val둘 다 불변성을 나타내며 값을 읽고 finalJava에서 키워드로 작동 합니다.

val키워드는 런타임 값 const을 선언하는 데 사용해야 하고 키워드는 컴파일 시간 값을 선언하는 데 사용해야합니다.

const는 함수 및 생성자가 아닌 기본 데이터 유형에만 사용해야합니다.

Example -

const val fun1 = anyFunctionOrConstructor() // it is not fine
    val fun2 = anyFunctionOrConstructor() // it is perfectly fine

    const val aa = "My String" // it is perfectly fine


답변