美文网首页kotlin
Kotlin之const val和val

Kotlin之const val和val

作者: 因为我的心 | 来源:发表于2021-08-08 00:12 被阅读0次

1、const的使用

  • const 必须修饰val
  • kotlin中const只能用在顶级属性,以及object对象的属性中(伴随对象也是obejct)。

使用方式如下:

const val THOUSAND = 1000
object myObject {
    const val constNameObject: String = "constNameObject"
}

class MyClass {
    companion object Factory {
        const val constNameCompanionObject: String = "constNameCompanionObject"
    }
}

2、const val和val区别:

说到这,我们还是没有搞清楚const和val的区别,ok让我们看代码分析。

object myObject {
    const val constObject: String = "constObject"
    val normalObject: String = "normalObject"
}

打开Android studio 点击 Tools->Kotlin->Show Kotlin ByteCode

// class version 50.0 (50)
// access flags 0x31
public final class com/example/kotlin/myObject {

  // access flags 0x19
  public final static Ljava/lang/String; constObject = "constObject"
  @Lorg/jetbrains/annotations/NotNull;() // invisible

  // access flags 0x1A
  private final static Ljava/lang/String; normalObject = "normalObject"
  @Lorg/jetbrains/annotations/NotNull;() // invisible

  // access flags 0x11
  public final getNormalObject()Ljava/lang/String;
  @Lorg/jetbrains/annotations/NotNull;() // invisible
   L0
    LINENUMBER 144 L0
    GETSTATIC com/example/kotlin/myObject.normalObject : Ljava/lang/String;
    ARETURN
   L1
    LOCALVARIABLE this Lcom/example/kotlin/myObject; L0 L1 0
    MAXSTACK = 1
    MAXLOCALS = 1
  ......
}

从字节码我们可以看到const val 和val修饰对象的主要区别是:

  • const val 可见性为public final static,可以直接访问。
  • val 可见性为private final static,并且val 会生成方法getNormalObject(),通过方法调用访问。

3、总结:

当定义常量时,出于效率考虑,我们应该使用const val方式,避免频繁函数调用。

相关文章

网友评论

    本文标题:Kotlin之const val和val

    本文链接:https://www.haomeiwen.com/subject/pnlnvltx.html