在java中将双精度值与int进行比较是否有效?

2022-09-01 05:42:43
Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()

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

谢谢


答案 1

是的,它是有效的 - 它会在执行比较之前将 提升到 a。intdouble

请参阅 JLS 第 15.20.1 节(数值比较运算符),该节链接到 JLS 第 5.6.2 节(二进制数字提升)。

从后者:

加宽基元转换 (§5.1.2) 应用于转换以下规则指定的任一或两个操作数:

  • 如果任一操作数的类型为双精度型,则另一个操作数将转换为双精度型。

  • ...


答案 2

当使用两种不同的数值类型执行运算(包括比较)时,Java 将执行隐式加宽转换。这意味着,当您将 a 与 a 进行比较时,将转换为 a,以便 Java 可以将这些值比较为两个 s。所以简短的答案是肯定的,比较int和双精度是有效的,但有一个警告。doubleintintdoubledouble

问题在于,不应使用 、 或 运算符比较两个浮点值的相等性,因为可能存在精度误差。此外,您需要注意双精度值可以采用的特殊值:、、 和 。我强烈建议您在比较s时进行一些研究并了解这些问题。==<=>=NaNPOSITIVE_INFINITYNEGATIVE_INFINITYdouble


推荐