Различие заключается в том, когда определяется значение:
val — это константа времени выполнения — её значение присваивается при запуске программыconst val — это константа времени компиляции — её значение должно быть известно на этапе компиляцииconst valconst val имеет строгие требования:
String или примитивного типа (Int, Boolean, Double и т.д.)object или companion objectvalval намного более гибкая:
const val MAX_SIZE = 100 // OK – примитив, известно на этапе компиляции
const val APP_NAME = "MyApp" // OK – String, известно на этапе компиляции
const val value = someFunction() // ERROR – результат функции неизвестен на этапе компиляции
val greeting = someFunction() // OK – присваивается во время выполнения
val user = User("Alice") // OK – любой тип разрешён
const val для фиксированных конфигурационных значений вроде лимитов, тегов или ключей — компилятор может подставить эти значения inline, что даёт небольшой прирост производительностиval когда значение зависит от логики времени выполнения или имеет непримитивный типОбъявление const val позволяет компилятору выполнять inlining, потому что его значение определяется во время компиляции, тогда как значения val разрешаются во время выполнения и не могут быть inlined.
Новый — ещё не проверен сообществом
Вы