“const”和“val”有什么区别?

我最近读了关于const关键字,我很困惑! 我无法找到它和val关键字之间的任何区别,我的意思是我们可以使用它们来创建一个不可变的变量,还有什么我失踪?

const是编译时间常量。 这意味着它们的值必须在编译期间分配,与val s不同,它可以在运行时完成。

这意味着, const不能被分配给一个函数或任何类的构造函数,而只能被分配给一个String或者一个原语。

例如:

 const val foo = complexFunctionCall() //Not okay val fooVal = complexFunctionCall() //Okay const val bar = "Hello world" //Also okay 

只要加上卢卡的答案:

编译时常量

在编译时已知其值的属性可以使用const修饰符标记为编译时间常量。 这些属性需要满足以下要求:

  • 对象的顶级或成员
  • 使用String类型的值或基元类型初始化
  • 没有自定义的getter

来源: 官方文件