我知道在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
的调用会发生什么
答案 0 :(得分:4)
Boolean.valueOf
上调用 true
以创建盒装布尔对象。然后将其与传递给函数的那个进行比较。