请回顾一下Oracle规范-第5章。
这一行:
扩大的原语转换不会丢失有关数字值的总体大小的信息。
然后是下面两行,这条线表示震级信息可能会丢失。
从浮点数到双倍的拓宽的原语转换不受限制,可能会丢失有关转换值的总体大小的信息。
这似乎是一个明显的矛盾,这是一个错误吗?
发布于 2013-10-01 16:14:41
值得注意的是,JVM规范在2.11.4中的措辞更加清晰一些
扩大数值转换不会丢失有关数字值的总体大小的信息。实际上,从int扩展到long和int到double的转换根本不会丢失任何信息;数值是完全保留的。从浮点扩大到双倍的转换(FP-严格(§2.8.2) )也严格保留数值;然而,--然而,,这种非FP的转换--严格的转换可能会丢失有关转换值的总体大小的信息。
发布于 2013-10-11 12:48:51
是的,确实如此。来自先知:
嗨比尔 谢谢你的来信。我同意以下几点之间的矛盾: “不断扩大的原语转换不会丢失有关数字值的总体大小的信息。” 以及: “从浮点数扩大到双倍的原语转换不严格,可能会丢失有关转换值的总体大小的信息。” 只有第一句出现在第一版的JLS,在引入严格的to之前。第二句出现在JLS第二版,作为严格支持的一部分,第一句应同时修改。在Java 8版中,我将澄清的是,只有一些拓宽的原语转换才不会丢失震级信息。
发布于 2013-10-01 13:28:21
这更像是一种澄清。在浮点到双转换的特定情况下,除非指定了,否则无法保证不丢失信息。
https://stackoverflow.com/questions/19117279
复制相似问题