JVMS8
中的said:
虽然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
类型呢?仅用于方法签名的运行时检查?
答案 0 :(得分:7)
维护方法重载需要最少。假设我们在同一个类中有两个方法
boolean a(boolean x) {...}
和
boolean a(int x) {...}
它们可以具有不同的内部逻辑,因此在字节代码中,它们应该通过它们的签名来区分。