2016-06-02 34 views
60

Ho letto di recente la parola chiave const e sono così confuso! Non riesco a trovare alcuna differenza tra questo e la parola chiave val, voglio dire che possiamo usarli entrambi per creare una variabile immutabile, c'è qualcos'altro che mi manca?Qual è la differenza tra "const" e "val"?

+0

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

risposta

85

const s sono costanti di tempo di compilazione. Significa che il loro valore deve essere assegnato durante la compilazione, a differenza di val s, dove può essere fatto in fase di runtime.

Ciò significa che const s non può mai essere assegnato a una funzione oa un costruttore di classe, ma solo a un String o primitivo.

Ad esempio:

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

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

Che dire di qualcosa del genere: 'const val foo =" Hello world "' e 'val bar =" Hello world "'? Sono gli stessi? –

+2

@MathewHany, almeno non in termini di bytecode, consultare: http://stackoverflow.com/questions/37482378/static-data-in-kotlin/37485356#37485356 – hotkey

+0

Penso che i valori di 'const' saranno completamente integrati durante compilazione. –

9

Giusto per aggiungere alla risposta di Luka:

Compile-Time Costanti

proprietà il cui valore è noto al momento della compilazione può essere contrassegnato come costanti di tempo di compilazione usando il modificatore const. Tali proprietà devono soddisfare i seguenti requisiti:

  • di primo livello o membro di un oggetto
  • inizializzati con un valore di tipo stringa o di un tipo primitivo
  • No getter personalizzato

Fonte: Official documentation