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

Tas*_*sos 29 java double int comparison primitive-types

Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()
Run Code Online (Sandbox Code Playgroud)

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

谢谢

Jon*_*eet 64

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

参见JLS第15.20.1节(数值比较运算符),它链接到JLS第5.6.2节(二进制数字促销).

从后者:

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

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

  • ...


Cod*_*ice 6

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

问题是,你不应该使用比较平等两个浮动-PIONT值==,<=>=因为精度可能出现的错误的运营商.另外,你需要要小心这双可以采取特殊值:NaN,POSITIVE_INFINITY,和NEGATIVE_INFINITY.我强烈建议你做一些研究,并在比较doubles 时了解这些问题.