为何Java表达式(double)(10/4)*(int)10.0/4+(double)10/4输出7.5
Java表达式计算结果7.5的逻辑讲解
首先明确Java中3个核心运算规则:
- 运算优先级:括号 > 强制类型转换 > 乘除 > 加减,同优先级运算从左到右执行
- 整数除法规则:两个int类型做除法时,会直接舍弃小数部分,只返回整数结果
- 类型自动提升规则:运算中只要有一个操作数是double类型,另一个操作数会自动提升为double,最终运算结果也为double类型
你给出的计算表达式为:
(double) (10 / 4) * (int) 10.0 / 4 + (double) 10 / 4
分步计算逻辑如下:
- 计算括号内的
10 / 4:10和4都是int类型,执行整数除法,结果为int类型的2 - 执行强制转换
(double) 2,得到double类型的2.0 - 执行强制转换
(int) 10.0,得到int类型的10 - 按从左到右顺序计算乘除段
2.0 * 10 / 4:- 先算
2.0 * 10:double和int运算,int自动提升为double,结果为20.0 - 再算
20.0 / 4:double和int运算,结果为5.0
- 先算
- 计算加号右侧的
(double) 10 / 4:- 先将10强制转换为double得到
10.0 - 再执行
10.0 /4,结果为2.5
- 先将10强制转换为double得到
- 执行加法
5.0 + 2.5,最终得到结果7.5
你之前计算得到6,大概率是在计算2.0 *10 /4时错误按整数除法得到2,同时误将(double)10 /4按整数除法得到2,最终算出2*2 +2=6,忽略了double参与的除法不会执行整数截断的规则。
内容的提问来源于stack exchange,提问作者yukoi
相关产品推荐
相关产品推荐

