当前位置: 首页 > 面试题库 >

Java签署零和拳击

沙岳
2023-03-14
问题内容

最近,我用Java编写了一个项目,并注意到double /
Double实现具有非常奇怪的功能。Java中的double类型具有两个0,即0.0和-0.0(带符号的零)。奇怪的是:

0.0 == -0.0

的计算结果为true,但:

new Double(0.0).equals(new Double(-0.0))

评估为false。有谁知道背后的原因吗?


问题答案:

所有这些都在javadoc中进行了解释:

请注意,在大多数情况下,对于Double类的两个实例d1和d2,当且仅当d1.equals(d2)的值为true。

   d1.doubleValue() == d2.doubleValue()

也具有true的值。但是,有两个例外:

  • 如果d1和d2都表示Double.NaN,则即使Double.NaN ==
    Double.NaN的值为false,equals方法也将返回true。
  • 如果d1表示+0.0,而d2表示-0.0,反之亦然,即使+0.0 ==-0.0的值为true,相等测试的值为false。

此定义允许哈希表正常运行。

现在您可能会问为什么0.0 == -0.0是真的。实际上,它们并不是严格相同的。例如:

Double.doubleToRawLongBits(0.0) == Double.doubleToRawLongBits(-0.0); //false

是假的。但是,JLS要求(“
按照IEEE 754标准的规则 ”):

正零和负零被视为相等。

因此0.0 == -0.0是正确的。



 类似资料:
  • 问题内容: 一个简单的问题,答案相当复杂: 如何签名Java Midlet,以便可以在安全提示较少的情况下将其加载到手机上? 问题答案: 获取所需的软件 Java的SDK(JDK)从太阳(你应该已经有此) Java无线工具包(WTK)也从太阳 (可选)获取并安装Ant和Antenna,以使您的构建自动化(强烈建议您这样做) 导入现有证书(如果有的话) 如果您是从Verisign(或其他提供商)购买

  • 在定点数学中,我使用了大量16位信号,并用32位中间结果进行乘法运算。例如: 假设a是一个q14数,那么c与b的比例相同。 这很好,适用于有符号和无符号算术。 问题是:如果我混合类型会发生什么?例如,如果我知道乘数“a”总是在 0.0 到 1.0 之间,那么很容易使其成为无符号的 int q15 以获得额外的精度(并将移位计数更改为 15)。但是,我从来不明白如果您尝试在 C 中将有符号和无符号数

  • 那么,换句话说,为什么编译器不能在第二个方法中执行自动装箱呢?是因为在第二个方法中,绑定不是显式的,而在第一个方法中绑定是明确的。

  • 本文向大家介绍Java实现人机猜拳小游戏,包括了Java实现人机猜拳小游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例完成人机猜拳互动游戏的开发,供大家参考,具体内容如下 阶段一:实验——分析业务,创建用户类 1.分析业务,抽象出类、类的特征和行为 2.创建出用户类 阶段二:实验——创建出计算机类 1.创建计算机类Computer。实现计算机出拳 2.产生一个1—3的随机数,模拟计算机的出拳

  • 我需要使用256位的私钥为ECDSA的256位散列签名,就像比特币一样。由于缺少python中的ECDSA文档,我感到绝望。 我在网上找到了很多代码,但是没有什么比或类似的,我发现的所有东西都是我不懂的大量数学代码,但他们使用ecdsa库(我不知道为什么他们不在一个库中添加一个用于签名的签名函数,而是在使用库时需要一页代码?)。 这是目前为止我找到的最好的代码: 但我就是不能相信这样的代码,因为我

  • 问题内容: 我正在寻找一种检查a的内容以使用MD5哈希对其进行签名的方法。 伪代码可能看起来像这样 那可能吗? 问题答案: 是的,那是可能的。您需要借助以下方法来修饰响应:在其中,您可以用自定义实现替换,该实现将字节写入MD5摘要和“原始”输出流。最后提供一个访问器以获得最终的MD5和。 更新 我只是为了好玩而已,下面是一个启动示例: 响应包装器: MD5输出流: 如何使用它: