不允许
似乎是合理的int a = 8;
boolean b = (boolean)a;
因为这可能导致程序员错误,因为对于偶数整数,得到的布尔值将是假的,但为什么不扩大强制,例如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;
}
汇编为:
public static boolean returnFalse();
Code:
0: iconst_0
1: ireturn
public static boolean returnTrue();
Code:
0: iconst_1
1: ireturn
答案 0 :(得分:8)
内部表示无关紧要。
Java是强类型的:int
不是boolean
,而boolean
不是int
。
这是一个设计决定 - 如果你想使用true / false,请使用布尔值;传达某种东西。
如果你想使用一个整数来表示是/否,请使用数学比较 - 这也没关系。
该语言不支持直接转换,因为它没有设计。
关于JVM规范和布尔值的内部表示,这句话很有意思:
编译器将Java编程语言布尔值映射到Java虚拟机类型int的值时,编译器必须使用相同的编码。
对我而言:
如果编译器/ VM使用VM整数表示true / false,则它必须使用1/0约定。 含义为:如果编译器/ VM 不是使用VM整数表示true / false,则不需要这样做。
关于这一点的澄清将是有趣的,但最终没有相关性,真的。
答案 1 :(得分:0)
Java不是C ++,一个0表示false,1表示true表示。在java中,boolean是一种不同的数据类型。 C ++需要至少1个字节才能有一个布尔值。在java中,它取决于JVM的实现。
答案 2 :(得分:0)
这只是一种惯例,在C ++ 0等语言中是假的,所有其他整数都是真的。 Java没有任何约定为任何整数指定布尔值。
我很困惑“为什么不扩大强制,例如int a = true work”你想知道为什么他们没有这样做所以这会将1分配给一个?