Java中表达式11%2*7/(3+2)的结果是1还是1.4?运算符优先级疑问
结论
两个结果在对应运算场景下均符合Java语法规则,不存在错误,差异来源于Java对整数除法和浮点除法的不同处理逻辑。
原推导优先级验证
你按照PEDMAS规则梳理的运算优先级完全正确,运算顺序如下:
- 先计算括号内的加法:
3+2 = 5 - 再计算取余运算:
11%2 = 1 - 同级乘除运算从左到右执行:
1*7 =7,最后计算除法7/5
结果差异原因
- 当所有参与运算的操作数都是整数类型(如int)时,Java默认执行整数除法,会直接截断结果的小数部分,仅保留整数位,因此
7/5的运算结果为1,和你的推导结果一致。 - 当运算中存在float/double类型的操作数时,Java会自动将所有操作数提升为对应的浮点类型,执行浮点除法,保留小数部分,因此
7/5的运算结果为1.4。如果仅把最终运算结果强制赋值给float变量,但所有操作数还是int类型的话,会先按整数除法算出1再转成float,结果是1.0而非1.4,只有运算过程中存在浮点操作数时才会得到1.4的结果。
代码示例验证
// 全int操作数场景 int intResult = 11 % 2 * 7 / (3 + 2); System.out.println(intResult); // 输出1 // 含float操作数场景 float floatResult = 11 % 2 * 7.0f / (3 + 2); System.out.println(floatResult); // 输出1.4
内容的提问来源于stack exchange,提问作者pratyaksh sudan
相关产品推荐
相关产品推荐

