Ros*_*one 2 java language-design
不允许这似乎是合理的
int a = 8;
boolean b = (boolean)a;
Run Code Online (Sandbox Code Playgroud)
因为这可能导致程序员错误,因为即使整数产生的布尔值也是假的,但为什么不加宽,例如int a = true工作呢?
编辑:
根据JVM规范,第3.3.4节:
Java虚拟机使用1表示布尔数组组件以表示true,使用0表示false.其中Java编程语言布尔值由编译器映射到Java虚拟机类型int的值,编译器必须使用相同的编码.
例如:
public static boolean returnFalse() {
return false;
}
public static boolean returnTrue() {
return true;
}
Run Code Online (Sandbox Code Playgroud)
编译为:
public static boolean returnFalse();
Code:
0: iconst_0
1: ireturn
public static boolean returnTrue();
Code:
0: iconst_1
1: ireturn
Run Code Online (Sandbox Code Playgroud)
内部表示无关紧要.
Java是强类型的:a int不是a boolean,a boolean不是a int.
这是一个设计决定 - 如果你想使用true/false,请使用布尔值; 沟通的东西.
如果你想用一个整数表示真/假,使用数学比较 - 这也没关系.
该语言不支持直接转换,因为它没有设计.
关于JVM规范和布尔值的内部表示,这句话很有意思:
其中Java编程语言布尔值由编译器映射到Java虚拟机类型int的值,编译器必须使用相同的编码.
对我来说,这是:
如果编译器/ VM使用VM整数表示true/false,则它必须使用1/0约定.其含义是:如果编译器/ VM 未使用VM整数表示true/false,则不需要这样做.
关于这一点的澄清将是有趣的,但最终不相关,真的.