Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()
Utilities.getDistance返回双和getAttackRange返回INT。 上面的代码是一个if语句的一部分,它需要为真。 所以是比较有效?
谢谢
Utilities.getDistance(uni, enemyuni) <= uni.getAttackRange()
Utilities.getDistance返回双和getAttackRange返回INT。 上面的代码是一个if语句的一部分,它需要为真。 所以是比较有效?
谢谢
是的,它是有效的-这将推动int
到double
在进行比较之前。
见JLS节15.20.1(数值比较运算),可链接到JLS第5.6.2节(二元数字升级) 。
从后者:
加宽原语转换(§5.1.2)被施加到转换的任一个或由下面的规则中指定的两个操作数:
如果操作数的类型是双,其他被转换为加倍。
...
当与两个不同的数值类型执行操作(包括比较),Java将执行隐式扩大转换。 这意味着,当你比较一个double
用int
,将int
转换为double
以便Java可以那么值比较两个double
秒。 所以,简单的答案是肯定的,比较一个int和双是有效的,一个警告。
问题是,你不应该使用比较平等两个浮动-PIONT值==
, <=
或>=
因为精度可能出现的错误的运营商。 另外,你需要要小心这双可以采取特殊值: NaN
, POSITIVE_INFINITY
和NEGATIVE_INFINITY
。 我强烈建议你做一些研究,并进行比较时,了解这些问题, double
秒。
这应该是罚款。 在浮点运算/比较,如果一个参数是浮动/双然后另一个是INT也提升到了相同。
是的,它是绝对有效的比较int数据类型和数据类型双..
int i =10;
double j= 10.0;
if (i==j)
{
System.out.println("IT IS TRUE");
}
是的,它有效的,你的代码应该按预期工作,没有任何毛刺,但这不是最好的做法,静态代码分析仪像SonarQube表示这是一个“大”,“臭虫”,
从sonarQube重大BUG IMG
从sonarQube重大BUG描述
所以,正确的方式做到这一点就可以了,
Double.compare(val1,val2)==0
如果任何参数没有浮点变量,他们将晋升为浮点。
一切都会安好的。
Java将简单地返回数值的真实等于:
int n = 10;
double f = 10.0;
System.out.println(f==n);
上面的代码打印真实。