有人可以解释一下为什么这段代码无法编译:
boolean r = (boolean) 0;
为什么要编译?
double z = (float) 2.0_0+0___2;
我不理解写入浮点数后的字母。
答案 0 :(得分:9)
第一个没有编译,因为你根本无法将数字转换为boolean
。 boolean
为true
或false
。
第二个只使用下划线,can be used to separate numbers喜欢2_000_000
以提高可读性。在这种情况下,它们会被用来降低可读性,因为转换为float
(double
强制转换为float
并分配给double
不会。在这个特殊情况下做任何事情)。
后一种情况似乎是为了混淆而设计的,因为有几个陷阱。如果我们删除了不必要的下划线,我们会2.00+02
添加带有octal double
的文字02
。这基本上只是2+2
,但如果八进制值为0___10
,则会得到z = 10
的结果。然后你有float
的强制转换可能影响最终结果,因为64位被强制为32位然后再回到64位。这可能会使最终结果不如没有演员阵容那么精确。
答案 1 :(得分:0)
在某些语言中,如PHP或Javascript 0是假的,即不是false
,而是评估为boolean
值,它将是false
。在C中,0是false
。这些是您期望的可能原因。但是,在Java中,您无法将数字转换为boolean
。如果您想进行真实评估,可以实现辅助方法,例如:
public class LooselyTyped {
public boolean toBoolean(int input) {
return input != 0;
}
public boolean toBoolean(Object input) {
return (input != null) && (!input.equals(""));
}
}
然后:
boolean lt = LooselyTyped.toBoolean(yourvariable);