Kotlin中const val和val的区别

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修饰。

你可能感兴趣的:(Kotlin中const val和val的区别)