Since the val variable is read-only, in most cases we could treat it as a constant. We need to be aware that its initialization may be delayed, so this means that there are scenarios where the val variable may not be initialized at compile time, for example, when assigning the result of the method call to a value:
In this quick tutorial, we’ll discuss static final variables in Java and their equivalent in Kotlin.
In Java, declaring static final variables helps us create constants. And in Kotlin, we have several ways to achieve the same goal.
It’s a compile error to specify const when the assignment expression isn’t a compile-time constant.
On the other hand, if the assignment expression is a compile-time constant, IDEA suggests to add const keyword.
Hence the question: why does the language need it at all, if the compiler can infer it just fine? What would change if we never use this keyword and let the compiler auto-infer it, so that it can be used for optimizations and whatever the other uses of const currently are.
This value will be assigned at runtime. There are, however, situations where we need to know the value at compile time. The exact value is required when we want to pass parameters to annotations. Annotations are processed by an annotation processor that runs long before the application is started: