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"?
risposta
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
Che dire di qualcosa del genere: 'const val foo =" Hello world "' e 'val bar =" Hello world "'? Sono gli stessi? –
@MathewHany, almeno non in termini di bytecode, consultare: http://stackoverflow.com/questions/37482378/static-data-in-kotlin/37485356#37485356 – hotkey
Penso che i valori di 'const' saranno completamente integrati durante compilazione. –
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
https://kotlinlang.org/docs/reference/properties.html#compile-time-constants – Michael