请查看Oracle Specification - Chapter 5。
这一行:
接着是扩展的原始转换不会丢失有关的信息 数值的整体幅度。
,只有2行,这一行表示幅度信息可以丢失。
从float到double的扩展原语转换不是 strictfp可能会丢失有关整体规模的信息 转换价值。
这似乎是一个明显的矛盾;这是一个错误吗?
答案 0 :(得分:3)
是的,确实如此。来自Oracle:
比尔,
感谢您的邮件。我同意之间存在矛盾:
“扩大的原始转换不会丢失有关的信息 数值的整体大小。“
和
“从float到double的扩展原语转换不是 strictfp可能会丢失有关整体规模的信息 换算价值。“
只有第一句出现在JLS第一版中, 在引入strictfp之前。第二句出现在 作为strictfp支持的一部分,JLS的第二版和 第一句应该同时修改。在Java中 SE 8版,我将澄清只有一些拓宽的原语 转换不会丢失量级信息。
答案 1 :(得分:2)
对于它的价值,JVM规范在2.11.4的措辞中更加清晰:
扩展数字转换不会丢失有关数值整体幅度的信息。实际上,从int扩展到long以及int转换为double的转换根本不会丢失任何信息;数值完全保留。从浮点数扩展到双精度的转换为FP严格(§2.8.2)也可以精确地保留数值; 然而,此类非FP严格的转换可能会丢失有关转换值总体幅度的信息。
答案 2 :(得分:1)
这更像是一个澄清。在浮动到双倍转换的特定情况下,除非指定 strictfp ,否则无法保证不会丢失信息