从浮动到双重铸造

时间:2018-02-19 10:02:12

标签: java casting compilation boolean expression

有人可以解释一下为什么这段代码无法编译:

boolean r = (boolean) 0;

为什么要编译?

double z = (float) 2.0_0+0___2;

我不理解写入浮点数后的字母。

2 个答案:

答案 0 :(得分:9)

第一个没有编译,因为你根本无法将数字转换为booleanbooleantruefalse

第二个只使用下划线,can be used to separate numbers喜欢2_000_000以提高可读性。在这种情况下,它们会被用来降低可读性,因为转换为floatdouble强制转换为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);