What is the difference between "const" and "val"?
Solution 1:
const
s are compile time constants. Meaning that their value has to be assigned during compile time, unlike val
s, where it can be done at runtime.
This means, that const
s can never be assigned to a function or any class constructor, but only to a String
or primitive.
For example:
const val foo = complexFunctionCall() //Not okay
val fooVal = complexFunctionCall() //Okay
const val bar = "Hello world" //Also okay
Solution 2:
Just to add to Luka's answer:
Compile-Time Constants
Properties the value of which is known at compile time can be marked as compile time constants using the const modifier. Such properties need to fulfill the following requirements:
- Top-level or member of an object declaration or a companion object.
- Initialized with a value of type String or a primitive type
- No custom getter
Such properties can be used in annotations.
Source: Official documentation