JVM中“boolean”类型的用途是什么



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类型。它只是用于方法签名的运行时检查吗?

至少需要支持方法重载。比方说,我们在同一类中有两种方法

boolean a(boolean x) {...}

boolean a(int x) {...}

它们可以有不同的内部逻辑,因此在字节码中,应该通过签名来区分它们。

最新更新