正如它所说的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) {...}
它们可以具有不同的内部逻辑,因此在字节代码中,它们应该通过其签名来区分.