Java整数除法/截断小数,如7/3得2;%符号同被除数;++/--混用易错;+遇String变拼接;除零时int抛异常、float得Infinity/NaN。

整数除法 / 为什么结果不是小数?
Java 中 / 对两个 int 操作时,结果仍是 int,直接截断小数部分(不是四舍五入),比如 7 / 3 得 2,不是 2.333...。
- 想得到小数结果?至少让一个操作数变成浮点型:
7.0 / 3、(double)7 / 3或7 / 3.0 - 别写
(double)(7 / 3)——先整除得2,再转double还是2.0,完全没用 - 实际场景常见于计算百分比、平均值、缩放比例等,类型不注意就出逻辑偏差
% 取余结果的符号到底跟谁走?
% 的符号永远和被除数(左操作数)一致,和除数无关。这是 Java 明确定义的行为,不是 bug。
-
-10 % 3→-1(被除数负,结果负) -
10 % -3→1(被除数正,结果正) -
-10 % -3→-1(仍看被除数) - 别拿它当“取绝对值余数”用;需要非负余数时,可加偏移再取模:
(a % n + n) % n
++ 和 -- 在表达式里混用有多危险?
前缀 ++i 和后缀 i++ 单独成句时效果一样,但一旦进到复合表达式(比如加法、赋值),执行顺序和取值时机立刻变得难读且易错。
-
int i = 3; int x = i++ + ++i;:结果是7(3 + 4),但依赖求值顺序,不同编译器/版本理论上可能有歧义(尽管 JVM 规范已明确定义) - 真实项目中几乎没人靠这个逻辑写业务代码;遇到类似
arr[i++] = val这种惯用法可以,但i++ + --i * 2这类应直接拆成多行 - IDE 通常会警告 “assignment has no effect” 或 “expression has no side effect”,别忽略
+ 遇到字符串就变拼接,怎么防误转型?
+ 是唯一重载行为最隐蔽的算术运算符:只要左右任一操作数是 String,整个链式运算就转为字符串拼接,且严格从左到右。
立即学习“Java免费学习笔记(深入)”;
-
"a" + 1 + 2→"a12"(不是"a3") -
1 + 2 + "a"→"3a"(前两个先算,再拼) - 调试时用
"" + x + y强制转字符串没问题,但生产日志里如果变量本该是数字却打成字符串,可能掩盖类型错误 - 需要数值计算?显式用
Integer.parseInt()或Double.parseDouble(),别依赖隐式转换
整数除零抛 ArithmeticException,浮点除零得 Infinity 或 NaN——这点看似基础,但线上服务里因配置错导致分母为 0 而挂掉的 case 并不少见。算术运算看着简单,每一步的类型、符号、副作用都得心里有数。










