const val使用情景
- 只能在Top-level,object和companion object的成员中声明
- 只允许String或者原始属性初始化
- 不能自定义get()
使用如下:
const val PI = 3.14 //Top-level 顶层声明
object Singleton {
const val constStr = "constStr" //在object的成员中声明
val valStr = "valStr"
}
class MyClass {
companion object {
const val comConstStr = "comConstStr" //在companion object中声明
}
}
const val和val的区别
object Singleton {
const val constStr = "constStr" //在object的成员中声明
val valStr = "valStr"
}
查看上面代码的字节码
...
public final static Ljava/lang/String; constStr = "constStr"
...
private final static Ljava/lang/String; valStr
...
public final getValStr()Ljava/lang/String;
...
GETSTATIC example/Singleton.valStr : Ljava/lang/String;
由此可见,constStr被public final static修饰,而valStr被private final static修饰。并且valStr的值是通过getValStr()去获取的,const修饰的constStr是直接获取的,所以就常量而言为了提升效率最好用const修饰。