当前位置: 首页 > 知识库问答 >
问题:

JLS似乎自相矛盾

姜运珧
2023-03-14

请查看Oracle规范-第5章。

这一行:

拓宽的基元转换不会丢失有关数值的整体大小的信息。

接下来,就在下面两行,这一行说震级信息可能会丢失。

从float到double的非strictfp加宽原语转换可能会丢失有关转换值的总体大小的信息。

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

共有3个答案

钱渊
2023-03-14

这更像是一种澄清。在浮点到双精度转换的特定情况下,除非指定strictfp,否则不能保证不会丢失信息

皇甫礼骞
2023-03-14

值得一提的是,JVM规范在2.11中的措辞更加清晰。4:

扩大数值转换不会丢失有关数值的整体大小的信息。事实上,从int到long和int到两倍的转换不会丢失任何信息;数字值被精确地保留。从浮点数扩大到FP-严格的两倍的转换(§2.8.2)也会精确地保留数值;然而,这种非FP-严格的转换可能会丢失关于转换值的总体大小的信息。

章飞章
2023-03-14

是的。从甲骨文:

嗨Bill

谢谢你的邮件。我同意以下两者之间存在矛盾:

“加宽原语转换不会丢失有关数值整体大小的信息。”

和:

"在不严格tfp的情况下,将基本元素从浮动值转换为两倍,可能会丢失有关转换值的总体大小的信息。"

在引入strictfp之前,JLS第一版中只出现了第一句话。第二句出现在JLS第二版中,作为strictfp支持的一部分,第一句应同时进行修改。在JavaSE8版本中,我将澄清,只有一些扩展的原语转换不会丢失大小信息。

 类似资料:
  • 问题内容: 我目前正在使用几种不同模式用Java开发一个简单的游戏。我扩展了Game类的主要内容,以将主要逻辑放入其他类中。尽管如此,主要的游戏类别仍然相当庞大。 快速浏览一下我的代码后,其中大部分是Getters和Setters(60%),而游戏逻辑真正需要的其余部分则是Getters和Setters。 Google的一些搜索声称Getters和Setters是邪恶的,而其他一些人则声称它们是良

  • 刚刚在centos 6上安装了mongodb。尝试用命令“mongo”连接mongo sh却得到这个错误消息:2015-09-26T07:07:35.309 0000 W网络在5000毫秒后连接127.0.0.1:27017失败,放弃。2015-09-26T07:07:35.316 0000 E查询错误:无法连接到服务器127.0.0.1:27017 (127.0.0.1),连接尝试在连接时失败(

  • 我对线程非常陌生,在代码中使用线程时,我面临以下问题。 点击一个按钮,我就启动了一个运行特定任务的线程,这个任务在系统的后台运行。我在线程中使用了一个while循环来检查一个易失性bool是否被另一个按钮点击来停止整个过程而改变。问题是我必须添加一个空循环,否则它看起来就像线程停止自己,不再检查while条件。我认为这是非常低效的,浪费了很多资源。 我添加了一个简短的代码版本,以减少不可读性。 你

  • 问题内容: 因此,我有此标记,并且在其内部设置了图像顶部的蓝色叠加层。 如果我不制作 ,标题文本将隐藏在蓝色层的后面…好像它的用法在模仿 为什么会这样呢? 问题答案: 您需要参考规范,更确切地说是绘画顺序,以了解何时打印每一层。 在没有元素的情况下,未放置元素并将在步骤(4)中进行打印: 对于其所有 流入的,未定位的, 块级的树状后代:如果元素是块,列表项或其他等效块: 然后在步骤(8)中打印定位

  • 我计划通过存储某种可以在JS中生成的校验和来实现一个解决方案,以确保数据完全存在。如果没有,则清除它并从服务器中取出。

  • 我在使用Discord。js和一个长时间运行的Discord bot最近由于消息而突然停止工作。成员对象始终为空。 例如: 这始终会产生:TypeError:无法读取null的属性“roles” 在我们查看消息的代码库中,这种错误也随处可见。成员 即使控制台完全记录消息对象,我们也可以肯定地看到成员属性为空。 Discord.js?有什么变化吗?