第1章 · 语法与类型的隐形陷阱 章节摘要:最基础的语法恰恰是返工率最高的地方。本章从三个真实翻车现场出发—— 缓存让 时灵时不灵、浮点数算钱差出一分钱、 落到未覆盖的分支——把 Java 类型系统、自动装拆箱、数值精度和控制流的边界规则一次讲透。读完你会对"简单代码"保持敬畏。 学习目标 说清 缓存池的区间以及 与 在包装类型上的行为差异 解释 IEEE 754 浮点误差的来源,掌握金额场景的 正确用法 列出 语句的穿透、null 键、新增枚举值三类高发坑 在代码评审中识别自动装箱引发的性能与语义问题 核心概念速览 类型系统的规则写在规范里只有几页纸,但它触发的事故能写满一整章。 子章节导航 1.
章节摘要:最基础的语法恰恰是返工率最高的地方。本章从三个真实翻车现场出发——
Integer缓存让==时灵时不灵、浮点数算钱差出一分钱、switch落到未覆盖的分支——把 Java 类型系统、自动装拆箱、数值精度和控制流的边界规则一次讲透。读完你会对"简单代码"保持敬畏。
Integer 缓存池的区间以及 == 与 equals 在包装类型上的行为差异BigDecimal 正确用法switch 语句的穿透、null 键、新增枚举值三类高发坑类型系统的规则写在规范里只有几页纸,但它触发的事故能写满一整章。
一个只在部分数据上复现的排序 Bug,牵出 IntegerCache、== 语义与自动装拆箱的全部细节。
对账系统每天差几分钱,根因是 double 的二进制表示根本存不下 0.1。这一节讲精度事故的机理与 BigDecimal 的正确姿势。
新增一个枚举值后线上 NPE——switch 的穿透、null 判断缺失和分支覆盖问题是这一节的主角。
三节共用一条主线:编译器替你做的隐式转换,是语义漂移的温床。
隐式转换发生处 表现形式 事故形态 ---------------- ---------------- ------------------ int 转 Integer 自动装箱 + 缓存池 == 比较时灵时不灵 十进制转二进制 double 精度误差 金额对不平 枚举新增值 switch 无默认分支 线上 NPE
先看装箱拆箱(语义层),再看浮点(表示层),最后看控制流(结构层),难度递进,坑的隐蔽度也递进。
equals/hashCode 契约、第 4 章字符串常量池、第 5 章包装类型在高并发计数器上的用法,都以本章的装拆箱机理为基础。