【问题标题】:Why can't I compare two numbers Double class Java using operator "=="? [duplicate]为什么我不能使用运算符“==”比较两个数字 Double 类 Java? [复制]
【发布时间】:2020-09-25 20:17:26
【问题描述】:

我尝试使用 Double 类编写一个简单的代码来比较数字是否相等。这是我的简单代码:

BufferedReader bfr= new BufferedReader(new InputStreamReader(System.in));
    Double number1;
    Double number2;
    System.out.println("Ask for first number:");
    number1 = Double.parseDouble(bfr.readLine());
    System.out.println("Ask for second number:");
    number2 =  Double.parseDouble(bfr.readLine());
    
    if(number1==number2) {
        System.out.println("These numbers are equals!");
        System.out.println(number1);
        System.out.println(number2);
    }else {
        System.out.println("They're differents!");
        System.out.println(number1);
        System.out.println(number2);
    }

当我使用“int”而不是 Double 和运算符“==”时,它工作正常,但当我使用“Double”时,它显示它们是不同的数字,即使输入了相同的数字。我尝试使用 Object.equals() 方法,它工作正常,但我想知道为什么“Double”类不承认运算符“==”。

【问题讨论】:

  • 十进制处理器不能精确表示浮点数,而只能近似地表示
  • 我记得有一个 compare() 函数用于比较双精度数
  • @HovercraftFullOfEels:这实际上不是数值近似的问题。如果您解析0.1 两次,您将获得相同的double 值。但是 OP 正在比较两个 Double 包装器对象的对象身份!
  • @JoachimSauer:哎呀,我的错。然后需要Double.compare(...)Double#equals(...)
  • @JoachimSauer:更好的副本:stackoverflow.com/questions/12226757/…

标签: java


【解决方案1】:

intDouble 之间的重要区别不是浮点性质(尽管这会使计算以意想不到的方式运行),但事实上 int 是一个原语type 和 Double 是一个引用类型(double 的包装)。

当您使用== 比较引用类型值时,您会检查对象身份。 IE。表达式number1 == number2 的意思是“让变量number1number2 引用完全相同的对象”,这几乎肯定不是你想要的。

您发现的解决方案是使用number1.equals(number2)

另一种解决方法是从 Double(包装器)切换到 double 原始类型。通常您可以将一个分配给另一个,然后适当的自动装箱/自动拆箱将处理转换。

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多