Java 编译器是否会优化简单的重复数学运算,例如:
if (prevX / width != curX / width) {
// Do something with prevX / width value
} else {
// Do something with curX / width value
}
我知道我可以将结果分配给 if 语句之前的变量,然后返回变量,但这有点麻烦。如果编译器自动识别正在进行相同的计算并将结果自行缓存到临时变量中,我宁愿坚持上述约定。
*编辑-我是个白痴。我试图过于简单/抽象我的问题。这并不简单: if (x > y)
答案是肯定的。这就是所谓的公共子表达式消除是 Java、C/C++ 等中使用的标准(且功能强大)编译器优化...
这一页确认 HotSpot JVM 将执行此优化。
也就是说,编译器/运行时是否能够在您期望的时候进行这种优化是另一回事。所以我通常更喜欢自己做这些优化,如果它也能增强可读性的话。
double xw = x / width;
double yw = y / width;
if (xw > yw) {
return xw;
} else {
return yw;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)