在JVM中'boolean'类型的用途是什么?

ubof19bj  于 2022-11-07  发布在  其他
关注(0)|答案(1)|浏览(112)

正如它在JVMS8中所说:
虽然Java虚拟机定义了布尔类型,但它只提供了非常有限的支持。没有专门用于布尔值运算的Java虚拟机指令。相反,Java编程语言中运算布尔值的表达式被编译为使用Java虚拟机int数据类型的值。
的确,这两种方法:

boolean expr1(boolean a, boolean b) {
    return a || b;
}

int expr2(int a, int b) {
    return ((a != 0) || (b != 0)) ? 1 : 0;
}

将产生相同的字节码(方法签章除外)

boolean expr1(boolean, boolean);
    Signature: (ZZ)Z
    Code:
       0: iload_1       
       1: ifne          8
       4: iload_2       
       5: ifeq          12
       8: iconst_1      
       9: goto          13
      12: iconst_0      
      13: ireturn       

  int expr2(int, int);
    Signature: (II)I
    Code:
       0: iload_1       
       1: ifne          8
       4: iload_2       
       5: ifeq          12
       8: iconst_1      
       9: goto          13
      12: iconst_0      
      13: ireturn

所以,我不明白为什么JVM仍然需要boolean类型?只是为了运行时检查方法签名?

svujldwt

svujldwt1#

至少,它是维护方法重载所需要的。
boolean a(int x) {...}

boolean a(int x) {...}
它们可以有不同的内部逻辑,因此在字节码中应该通过它们的签名来区分它们。

相关问题