章节导读
本章定位:运算符是程序逻辑的最小执行单元——条件判断、数值计算、位级操控,一切程序行为都建立在运算符之上。本章系统讲解 Java 中 42 种运算符的语义、优先级和底层执行原理,以及短路效应、位运算权限控制等实战技巧。
飞翔科技场景导入
代码审查会上,大翔敲了敲白板:"小崔,你这行
if (flag = true)是什么意思?赋值还是判断?"白歌接过话:"运算符优先级的问题,我大学时也踩过这个坑。
=和==写混,&&和&不分——这些问题有一个共同的名字:对运算符的理解不到位。"黄俪(前端转 Java)笑着说:"当年我还以为
i++和++i没区别,结果一个循环多跑了一遍。"孔蓝(测试工程师)补充:"飞翔科技的权限模块有一次把
|写成了||,结果所有用户都拿到了管理员权限——单字符之差,安全漏洞。"
知识图谱
各文件学习路线
| 文件 | 核心内容 | 难度 | 建议学时 |
|---|---|---|---|
| 算术运算符.md | + - * / % ++ --,除法和取余的坑 | ★★☆ | 1 |
| 关系运算符.md | == != > < >= <= instanceof,== vs equals,浮点比较 | ★★☆ | 0.5 |
| 逻辑运算符.md | && || ! & |,短路效应,空指针防御 | ★★☆ | 0.5 |
| 位运算符.md | & | ^ ~ << >> >>>,权限控制实战 | ★★★ | 1 |
| 赋值运算符.md | = += -= *= /= 等12种,复合赋值隐式转换 | ★★☆ | 0.5 |
| 条件运算符.md | ? : 三元运算,类型统一规则,NPE陷阱 | ★★☆ | 0.5 |
| 运算符优先级.md | 15级优先级总表,结合性,&&高于|| | ★★★ | 0.5 |
| 表达式.md | 求值顺序(从左到右铁律),类型提升链 | ★★★ | 0.5 |
前置知识
- 掌握8种基本数据类型及其取值范围
- 理解变量的声明与赋值
学习目标
- 正确使用算术运算符,区分
++i(先加后用)和i++(先用后加) - 用关系运算符比较基本类型和引用类型,理解
==vsequals()的本质区别 - 掌握逻辑运算符的短路机制,用
&&实现空指针防御 - 掌握位运算符的底层原理,能用位掩码实现权限控制
- 理解复合赋值运算符(
+=等12种)的隐式类型转换与溢出风险 - 熟练使用三元条件运算符
? :替代简单 if-else,注意类型统一规则 - 背熟15级运算符优先级表和结合性,用括号消除一切歧义
- 理解表达式求值顺序(从左到右铁律)与类型提升链,能手动推演复杂表达式
面试高频考点
| 考点 | 出现频率 | 典型问题 |
|---|---|---|
== vs equals() | 98% | String 比较用哪个? |
| 短路效应 | 85% | false && (1/0) 会抛异常吗? |
++ 前后缀 | 80% | int i=0; i=i++ 结果? |
| 位运算 | 60% | 如何用位运算判断奇偶? |
与下一章的衔接
学完运算符后,你已经能构建任意复杂的布尔表达式。下一章「流程控制」将基于这些表达式构建 if-else、switch、for、while 等流程控制结构——小崔那行 if (flag = true) 正是从运算符走向流程控制的标志性一课。
白歌的提醒:优先级背不下来没关系——用括号。代码是写给人看的,偶尔才是给编译器运行的。
准备好了吗?让我们从最常用的算术运算符开始。