Мне известна идиома употребления булевых значений в Котлине:
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