在java中比较double和int是否有效?
Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()
Utilities.getDistance返回double,getAttackRange返回int。 上面的代码是if语句的一部分,它必须是true。 那么比较有效吗?
谢谢
是的,它是有效的 – 它会在执行比较之前将int
提升为double
。
参见JLS第15.20.1节(数值比较运算符) ,它链接到JLS第5.6.2节(二进制数字促销) 。
从后者:
应用扩展基元转换(第5.1.2节)来转换由以下规则指定的一个或两个操作数:
如果任一操作数的类型为double,则另一个操作数转换为double。
…
当使用两种不同的数字类型执行操作(包括比较)时,Java将执行隐式扩展转换。 这意味着当您将double
与int
进行比较时, int
将转换为double
以便Java可以将这些值比较为两个double
。 所以简短的回答是肯定的,比较一个int和一个double是有效的,但需要注意。
问题是您不应该使用==
, <=
或>=
运算符来比较两个浮点值的相等性,因为可能存在精度误差。 此外,您需要注意double可以采用的特殊值: NaN
, POSITIVE_INFINITY
和NEGATIVE_INFINITY
。 我强烈建议你做一些研究,并在比较double
s时了解这些问题。
这应该没问题。 在浮点运算/比较中,如果一个参数是浮点/双精度,那么另一个是int也会被提升为相同。
是的,比较int数据类型和双数据类型是绝对有效的..
int i =10; double j= 10.0; if (i==j) { System.out.println("IT IS TRUE"); }
一切都会安好的。
Java将简单地返回true,数值相等:
int n = 10; double f = 10.0; System.out.println(f==n);
上面的代码打印为true。
是的,它是有效的,你的代码应该按预期工作,没有任何故障,但这不是最好的做法,像SonarQube这样的静态代码分析器将其显示为“主要”“Bug”,
来自sonarQube的主要Bug img
sonarQube的主要Bug描述
所以,正确的方法是,
Double.compare(val1,val2)==0
如果任何参数不是浮点变量,它们将被提升为浮点数。