Java代码输出不符预期:为何exp1=5、exp2=4而非均为5?
问题分析:为什么输出是5,4而非5,5?
这是Java整数除法特性和运算优先级共同作用的结果,核心在于整数除法会直接丢弃小数部分,只保留整数商,具体拆解两个表达式:
对于
exp1 = (x * y / x):
运算顺序是先执行乘法x*y,即2*5=10,再做除法10/x=10/2=5,全程没有精度丢失,结果为5。对于
exp2 = (x * (y / x)):
括号改变了运算优先级,先计算括号内的y/x,也就是5/2。由于是整数除法,5除以2的商为2,余数1被直接丢弃,得到结果2。再用x乘以这个结果:2*2=4,因此exp2最终值为4。
本质是exp2提前执行除法导致精度丢失,而exp1先做乘法规避了这个问题。
内容的提问来源于stack exchange,提问作者forgotten rival
相关产品推荐
相关产品推荐

