是使用== deterministic比较双值

时间:2017-08-25 09:18:18

标签: java

import java.math.BigDecimal;

public class HelloWorld{

     public static void main(String []args){
        BigDecimal previousOperationAmount = new BigDecimal(1149.35);
        Double requestedAmount = 1149.35;

        if (requestedAmount != previousOperationAmount.doubleValue()) {
            System.out.println("Hello 1");
        }

        if(!requestedAmount.equals(previousOperationAmount.doubleValue())) {
            System.out.println("Hello 2");
        }
     }
}

有两种比较双值的方法.. 一个是!=运算符,一个是.equals运算符。我明白.equals是更好的比较方式。但在这里,!=比较也没有给出任何错误。

可以使用!=比较双值? 是!=检查双值是否确定?

1 个答案:

答案 0 :(得分:3)

documentation中明确指出了差异:

  

请注意,在大多数情况下,对于两个类Doubled1和}的实例   d2,当{且仅当

时,d1.equals(d2)的值为true
d1.doubleValue() == d2.doubleValue()
     

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

     
      
  • 如果d1d2都代表Double.NaN,那么equals方法会返回true,即使Double.NaN==Double.NaN具有false   价值d1
  •   
  • 如果+0.0代表d2-0.0代表false,   反之亦然,相等的测试具有值+0.0==-0.0,即使如此   true的值为Higher order functions
  •