Kotlin - Как работает логическое выражение?если выражение работает на байт-код - PullRequest
0 голосов
/ 09 июня 2018

Мне известна идиома употребления булевых значений в Котлине:

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 голосов
/ 09 июня 2018

Boolean.valueOf вызывается для константы true для создания логического объекта в штучной упаковке.Затем он сравнивается с передаваемым функции.

...