将double与int中的int进行比较是否有效?

时间:2012-11-08 20:25:19

标签: java comparison int double primitive-types

Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()

Utilities.getDistance返回double,getAttackRange返回int。上面的代码是if语句的一部分,它必须是true。那么比较是否有效?

由于

6 个答案:

答案 0 :(得分:64)

是的,它有效 - 它会在执行比较之前将int提升为double

请参阅JLS section 15.20.1 (Numerical Comparison Operators)链接到JLS section 5.6.2 (Binary Numeric Promotion)

来自后者:

  

应用扩展基元转换(第5.1.2节)来转换以下规则指定的一个或两个操作数:

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

  •   
  • ...

  •   

答案 1 :(得分:5)

当使用两种不同的数字类型执行操作(包括比较)时,Java将执行隐式扩展转换。这意味着,当您将doubleint进行比较时,int会转换为double,以便Java可以将这两个值进行比较double秒。所以简短的回答是肯定的,比较一个int和一个double是有效的,但需要注意。

问题在于,您不应使用==<=>=运算符比较两个浮点值的相等性,因为可能存在精度错误。此外,您需要注意双人可以采取的特殊值:NaNPOSITIVE_INFINITYNEGATIVE_INFINITY。我强烈建议您在比较double s。

时进行一些研究并了解这些问题

答案 2 :(得分:2)

这应该没问题。 在浮点运算/比较中,如果一个参数是浮动/双重,那么另一个为int的也会被提升为相同。

答案 3 :(得分:1)

是比较int数据类型和双数据类型绝对有效..

int i =10;
double j= 10.0;
 if (i==j)
{
System.out.println("IT IS TRUE");
}

答案 4 :(得分:1)

是有效的,您的代码应该可以按预期运行,没有任何故障,但这不是最佳做法, 诸如SonarQube之类的静态代码分析器将其显示为“主要”“错误”,

Major Bug img from sonarQube

Major Bug description from sonarQube

因此,正确的方法可以是

Double.compare(val1,val2)==0 

如果任何参数不是浮点变量,它们将被提升为浮点。

答案 5 :(得分:0)

没关系。

Java只会返回true,数值相等:

    int n = 10;
    double f = 10.0;
    System.out.println(f==n);

上面的代码打印为true。