Kotlin - 布尔怎么样?如果表达式适用于字节码

时间:2018-06-09 15:16:15

标签: kotlin bytecode

我知道在Kotlin中消费可空的布尔人的习语是:

fun nullableBoolean(b: Boolean?) {
    if (b == true) {
        println("is true")
    }
}

我很好奇发生了什么。这是此函数生成的字节码的有趣部分:

public final static nullableBoolean(Ljava/lang/Boolean;)V
    @Lorg/jetbrains/annotations/Nullable;() // invisible, parameter 0
   L0
    LINENUMBER 4 L0
    ALOAD 0
    ICONST_1
    INVOKESTATIC java/lang/Boolean.valueOf (Z)Ljava/lang/Boolean;
    INVOKESTATIC kotlin/jvm/internal/Intrinsics.areEqual (Ljava/lang/Object;Ljava/lang/Object;)Z
    IFEQ L1
    ...

我可以看到Intrinsics.areEqual进行空检查。但我不明白当引用为java/lang/Boolean.valueOf

时,对null的调用会发生什么

1 个答案:

答案 0 :(得分:4)

在常量Boolean.valueOf上调用

true以创建盒装布尔对象。然后将其与传递给函数的那个​​进行比较。