2016-06-02 23 views
60

Ostatnio czytałem o słowie kluczowym const i jestem taki zagubiony! Nie mogę znaleźć żadnej różnicy między nim a słowem kluczowym val, tzn. Możemy użyć ich obu do stworzenia niezmiennych zmiennych, czy jest coś jeszcze, czego mi brakuje?Jaka jest różnica między "const" i "val"?

+0

https://kotlinlang.org/docs/reference/properties.html#compile-time-constants – Michael

Odpowiedz

85

const s są sumami czasowymi kompilacji. Oznacza to, że ich wartość musi zostać przypisana podczas kompilacji, w przeciwieństwie do val s, gdzie można to zrobić w środowisku wykonawczym.

Oznacza to, że const s nigdy nie może być przypisane do funkcji lub dowolnego konstruktora klasy, ale tylko do obiektu String lub prymitywu.

Na przykład:

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

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

Co powiesz na coś takiego: 'const val foo =" Hello world "' i 'val bar =" Hello world "'? Czy oni są tacy sami? –

+2

@MathewHany, przynajmniej nie pod względem kodu bajtowego, zobacz: http://stackoverflow.com/questions/37482378/static-data-in-kotlin/37485356#37485356 – hotkey

+0

Myślę, że wartości "const" będą po prostu całkowicie inline kompilacja. –

9

Wystarczy dodać do Luka odpowiedź:

kompilacji Stałe

Właściwości którego wartość jest znany w czasie kompilacji mogą być oznaczone jako czas kompilacji przy użyciu modyfikatora const. Właściwości te muszą spełniać następujące wymagania:

  • najwyższego poziomu lub członek obiektu
  • inicjowane z wartości typu String lub prymitywnego typu
  • Nie zwyczaj pochłaniacza

Źródło: Official documentation