What is the difference between "const" and "val"?

Mathew Hany picture Mathew Hany · Jun 2, 2016 · Viewed 48.5k times · Source

I have recently read about the const keyword, and I'm so confused! I can't find any difference between const and the val keyword, I mean we can use both of them to make an immutable variable, is there anything else that I'm missing?

Answer

Luka Jacobowitz picture Luka Jacobowitz · Jun 2, 2016

consts are compile time constants. Meaning that their value has to be assigned during compile time, unlike vals, where it can be done at runtime.

This means, that consts 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