从浮动到双重铸造

Kat*_*tja 4 java expression casting boolean compilation

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

boolean r = (boolean) 0;
Run Code Online (Sandbox Code Playgroud)

为什么这个编译?

double z = (float) 2.0_0+0___2;
Run Code Online (Sandbox Code Playgroud)

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

Kay*_*man 9

第一个不编译,因为你根本无法将数字转换为a boolean.A booleantruefalse.

第二个只使用下划线,可以用来分隔数字,2_000_000以提高可读性.在这种情况下,它们被用来降低可读性,就像转换为float(在这种特定情况下转换doublefloat和转移到double什么都不做).

后一种情况似乎是为了混淆而设计的,因为有几个陷阱.如果我们删除不必要的下划线,我们会得到2.00+02一个double带有八进制 的文字02.这仍然基本上只是2+2,但如果八进制值得到0___10你的结果z = 10.然后你有float可能影响最终结果的强制转换,因为64位被强制为32位然后又回到64位.这可能会使最终结果不如没有演员阵容那么精确.