【发布时间】:2012-06-12 20:37:04
【问题描述】:
不允许这样做似乎是合理的
int a = 8;
boolean b = (boolean)a;
因为这可能导致程序员错误,因为结果布尔值对于偶数整数来说是错误的,但是为什么不扩大强制,例如int a = true工作?
编辑:
根据 JVM 规范,第 3.3.4 节:
Java 虚拟机使用 1 对布尔数组组件进行编码到 代表真,0代表假。 Java编程在哪里 语言布尔值由编译器映射到 Java 的值 虚拟机类型 int,编译器必须使用相同的编码。
例如:
public static boolean returnFalse() {
return false;
}
public static boolean returnTrue() {
return true;
}
编译为:
public static boolean returnFalse();
Code:
0: iconst_0
1: ireturn
public static boolean returnTrue();
Code:
0: iconst_1
1: ireturn
【问题讨论】:
-
a 的值是多少?为什么? 1 比 23、-567 还是 0 更真实?
-
因为 int 不是布尔值。我不太明白“奇数”的意思。
-
显然 42 比 -567 更真实。
-
@DaveNewton,您应该将其发布为答案。
-
@LouisWasserman 在我完成输入后我意识到它似乎比评论更回答:/
标签: java language-design