JLS似乎与自相矛盾

时间:2013-10-01 13:19:17

标签: java jls

请查看Oracle Specification - Chapter 5

这一行:

  

扩展的原始转换不会丢失有关的信息   数值的整体幅度。

接着是

,只有2行,这一行表示幅度信息可以丢失。

  

从float到double的扩展原语转换不是   strictfp可能会丢失有关整体规模的信息   转换价值。

这似乎是一个明显的矛盾;这是一个错误吗?

3 个答案:

答案 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 ,否则无法保证不会丢失信息