Kotlin - 布尔值如何? in if 表达式适用于字节码

Kotlin - How does Boolean? in if expression works on 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 进行了空检查。但是我不明白当引用是 null

时调用 java/lang/Boolean.valueOf 会发生什么
正在对常量 true 调用

Boolean.valueOf 以创建一个装箱的布尔对象。然后将其与传递给函数的值进行比较。