Java中的`x>0`和`x>0.0D`之间有什么区别吗?

以下代码来自Math.javajava标准库:

public static double abs(double a) {
    return (a <= 0.0D) ? 0.0D - a : a;
}

我有以下问题:

  1. 代码是否等于 return (a <= 0) ? 0.0D - a : a;
  2. 此外,代码是否等于 return (a <= 0) ? - a : a;

谢谢你的帮助!

回答

a <= 0a双转换0double(由于二进制数字提升),这意味着它相当于a <= 0.0D.

a <= 0.0D可能更有效,因为它保存了转换,但如果编译器转换a <= 0a <= 0.0D以保存该类型转换,我不会感到惊讶。

JLS相关报价:

15.20.1。数值比较运算符 <、<=、> 和 >=

对操作数执行二进制数字提升(第 5.6.2 节)。

5.6.2. 二进制数字提升

如果任一操作数的类型为 double,则另一个将转换为 double。

至于你的第二个问题,使用一元否定运算符的代码等同于abs方法的代码,因为:

对于浮点值,否定与从零减法不同,因为如果 x 为 +0.0,则 0.0-x 为 +0.0,而 -x 为 -0.0。一元减号只是反转浮点数的符号。

( 15.15.4. 一元减运算符 - )

顺便说一句,正零或负零的情况在该abs方法的Javadoc中被称为特例:

特别案例:

• 如果参数为正零或负零,则结果为正零。

• 如果参数是无穷大,则结果是正无穷大。

• 如果参数为 NaN,则结果为 NaN。

前两个特殊情况是-a与 不同的情况0.0D - a


以上是Java中的`x&gt;0`和`x&gt;0.0D`之间有什么区别吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>