Java 中 DoubleValue.equals(AnotherDoubleValue) 上的声纳违规 - 为什么?

Vid*_*nan 0 java sonarqube java-11

我有一段 Java 代码,其中 -

public boolean method1(Double d1, Double d2) {

  if (d1.equals(d2)) {

    //Some logic
    return bool;

}
Run Code Online (Sandbox Code Playgroud)

语句 d1.equals(d2) 存在声纳违规,即“不应使用浮点值进行相等性测试”。链接: https: //rules.sonarsource.com/java/RSPEC-1244

在解释中,它讨论了使用 == 或 === 的重要性,但由于我使用的是 equals 方法,为什么它仍然显示为声纳违规?

Lou*_*man 5

==这与vs无关equals,而与 和double( DoubleandfloatFloat) 值很难确保它们完全 100% 相等有关,而不是相差 0.0000000000001。

声纳建议您执行类似的操作Math.abs(d1 - d2) < 0.0000001