我编写了一些计算代码(下面是我复制的一个非常简化的例子),像CASE2那样,结果很糟糕。像CASE1这样重构代码后,就可以正常工作了。我知道在CASE 2中存在隐式转换,但不确定完整原因。有人能够解释一下下面到底发生了什么吗?
//CASE 1, result 5.5
double auxMedia = (5 + 6);
auxMedia = auxMedia / 2;
//CASE 2, result 5.0
double auxMedia1 = (5 + 6) / 2;
//CASE 3, result 5.5
double auxMedia3 = (5.0 + 6.0) / 2.0;
//CASE 4, result 5.5
double auxMedia4 = (5 + 6) / 2.0;
我猜测CASE2中的/2操作将(5 + 6)强制转换为int类型,导致除法结果向下取整为5,然后再次强制转换为double类型并转换为5.0。
CASE3和CASE4也解决了这个问题。
/2
。其余都是由编译器完成的。 - Marc GravellauxMedia
是本地变量并且被赋予了一个常数。或者这是一种仅由JIT进行的优化吗? - Michael Burr