kotlin - Kotlin- bool 值如何?如果表达式对字节码有效

标签 kotlin bytecode

我知道在Kotlin中使用可空 bool(boolean) 值的惯用法是:

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会发生什么

最佳答案

为了创建一个装箱的 bool(boolean) 对象,将在常量Boolean.valueOf上调用true。然后将其与传递给函数的函数进行比较。

关于kotlin - Kotlin- bool 值如何?如果表达式对字节码有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50775730/

相关文章:

interpreter - 是什么让字节码解释器比 ast-walking 解释器更快?

c - 尝试掌握 C 字节码...GNU/gcc 是否/可以像 Clang/LLVM 一样生成 C 字节码?

java - 访问 .class 文件中的符号表

kotlin - 使用 lambda 的单功能监听器

android - 替代 findViewById 的 Kotlin Android 扩展如何防止空 View ?

java - 为什么 Java 1.0.2 的接口(interface) Member 没有设置 ACC_ABSTRACT?

java - 将代码添加到带有 Instrumentation : ASM or BCEL? 的 Java 类

从 R.attr 引用返回颜色资源 ID 的 Android 测试方法

kotlin - 如何为 KTOR HTTPclient Multiplatform Kotlin 项目配置引擎?还需要添加 SSL 证书

kotlin - maven-source-plugin 不适用于 kotlin