关键在于用括号明确意图、避开陷阱:整数除法需转浮点或用bigdecimal;%结果符号同被除数;位运算必须加括号;字符串拼接中+的结合性影响结果。

关键不是死记优先级表,而是用括号明确意图、避开几类典型陷阱。Java 运算符本身没有歧义,出错往往是因为人对结合顺序的直觉和语言实际规则不一致。
整数除法与浮点精度要主动干预
两个 int 相除,结果自动截断小数,不四舍五入也不报错:
-
错误写法:
int a = 10, b = 3; System.out.println(a / b);→ 输出 3(不是 3.33) -
安全写法:显式转浮点类型,如
(double)a / b或a / (double)b - 若需精确小数运算(比如金额),直接用
BigDecimal,别依赖float/double的二进制近似值
取模(%)符号必须按被除数判断
Java 中 % 的结果符号始终与被除数一致,和除数无关:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
-
10 % 3→ 1 -
-10 % 3→ -1(不是 2) -
10 % -3→ 1(除数为负不影响结果符号) - 判断奇偶用
n % 2 == 0是安全的,它对负数也成立(因为-5 % 2 == -1,不等于 0)
逻辑与位运算混用时务必加括号
&& 和 || 优先级很低(比 == 还低),&、|、^ 夹在关系和逻辑之间,极易误判:
-
orderType & FLAG_SPECIAL != 0实际执行的是orderType & (FLAG_SPECIAL != 0),不是你想的位掩码判断 - 权限判断应写成:
(flags & READ_PERMISSION) == READ_PERMISSION - 布尔逻辑统一用
&&/||;只有明确需要非短路或位操作时才用&/|
+ 号拼接要防隐式类型转换
+ 遇到字符串就触发拼接,且从左到右依次计算,结合性直接影响结果:
-
1 + 2 + "abc"→ "3abc"(先算数值加法) -
"abc" + 1 + 2→ "abc12"(每步都变成字符串) - 想确保数值计算优先,用括号:
"result: " + (1 + 2)→ "result: 3"
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










