Niedawno przeczytałem o tym const
słowie kluczowym i jestem tak zdezorientowany! Nie mogę znaleźć żadnej różnicy między const
i val
słowa kluczowego, to znaczy możemy korzystać zarówno z nich, aby zmienną niezmienny, jest jeszcze coś, co mi brakuje?
276
Odpowiedzi:
const
s są stałymi czasowymi kompilacji. Oznacza to, że ich wartość należy przypisać w czasie kompilacji, w przeciwieństwie doval
s, gdzie można to zrobić w czasie wykonywania.Oznacza to, że
const
nigdy nie można przypisać funkcji ani konstruktora żadnej klasy, ale tylko funkcjiString
pierwotnej.Na przykład:
źródło
const val foo = "Hello world"
ival bar = "Hello world"
? Czy oni są tacy sami?const
podczas kompilacji wartości będą całkowicie uwzględniane.const val
zamiast sprawiedliwegoconst
? Wydaje mi się, żeval
słowo kluczowe jest w tym kontekście całkowicie zbędne, ponieważconst var
byłoby absurdalne na pierwszy rzut oka.const val
,const
to modyfikator naval
zamiast słowa kluczowego. Modyfikatory> słowa kluczowe. Inne przykłady tej samej konstrukcji, sąannotation/enum/data class
,private val
,inline fun
itpAby dodać do odpowiedzi Luki:
Źródło: oficjalna dokumentacja
źródło
Możesz przekształcić Kotlin w Javę. Wtedy zobaczysz, że const ma jeszcze jeden statyczny modyfikator niż val . Prosty kod taki jak ten.
Kotlin:
Do Java (część):
źródło
const
zostanie usunięty, czy da inny plik Java?Zarówno
val
iconst
są niezmienne.const
służy do deklarowania stałych czasu kompilacji, podczas gdyval
dla stałych czasu wykonywania.źródło
const kotlin do Java
val kotlin do Java
W prostym języku
Przykład 1-
Jest tak, ponieważ getCar () jest analizowany w czasie wykonywania i przypisuje wartość do Car.
Do tego -
źródło
W Kotlin,
const
ival
oba reprezentują niezmienność i wartości tylko do odczytu i działają jakofinal
słowo kluczowe w java.val
słowo kluczowe musi być użyte do zadeklarowania wartości czasu wykonywania, aconst
słowo kluczowe musi być użyte do zadeklarowania wartości czasu kompilacji.Należy pamiętać, że const musi być używane tylko z prymitywnymi typami danych, a nie dla funkcji i konstruktorów.
źródło