최근에 const
키워드 에 대해 읽었으며 혼란스러워합니다! 키워드 const
와 val
키워드의 차이점을 찾을 수 없습니다. 둘 다를 사용하여 변경 불가능한 변수를 만들 수 있습니다. 누락 된 것이 있습니까?
최근에 const
키워드 에 대해 읽었으며 혼란스러워합니다! 키워드 const
와 val
키워드의 차이점을 찾을 수 없습니다. 둘 다를 사용하여 변경 불가능한 변수를 만들 수 있습니다. 누락 된 것이 있습니까?
답변:
const
s 컴파일 시간 상수입니다. 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
const val foo = "Hello world"
와 val bar = "Hello world"
? 그들은 같은가요?
const
컴파일하는 동안 값이 완전히 인라인 될 것이라고 생각 합니다.
const val
대신에 필요 const
합니까? val
이 맥락에서 키워드가 완전히 불필요한 것처럼 보입니다 . 왜냐하면 const var
얼굴에 터무니없는 것입니다.
const val
, const
에 수정입니다 val
보다는 키워드. 수정 자> 키워드. 이와 같은 디자인의 추가 예로는, 아르 annotation/enum/data class
, private val
, inline fun
등
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;
}
}
const
제거, 그것은 다른 자바 파일을 얻을 것인가?
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 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에 할당하기 때문입니다.
또한-
kotlin에서 const
그리고 val
둘 다 불변성을 나타내며 값을 읽고 final
Java에서 키워드로 작동 합니다.
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