章节导读:Java 常用类
本章定位:深入掌握 Java SE 8 中最核心的常用类——String、StringBuilder、StringBuffer、包装类、Math、Random、Object、日期时间API、大数值运算。这些类是每一天 Java 开发的基石,也是大厂面试的高频考点。
为什么这一章至关重要?
大翔作为飞翔科技的技术总监,经常面试校招新人。他发现一个规律:能深入讲清楚 String 常量池、equals/hashCode 契约、BigDecimal 构造陷阱的候选人,基础一定扎实。反之,那些只会"会用"却说不出"为什么"的候选人,往往在后续的框架学习和问题排查中举步维艰。
本章的每一节都不是孤立的——它们之间存在着深层关联:
本章知识图谱
| 章节 | 核心内容 | 难度 | 面试权重 |
|---|---|---|---|
| String | 不可变性、常量池、intern()、拼接原理 | ★★★★ | ⭐⭐⭐⭐⭐ |
| StringBuilder | 扩容机制、方法链、性能对比 | ★★☆ | ⭐⭐⭐ |
| StringBuffer | 线程安全、synchronized、复合操作 | ★★☆ | ⭐⭐⭐ |
| 包装类 | 装箱拆箱、Integer缓存、parseXxx | ★★★ | ⭐⭐⭐⭐ |
| Math | 数学函数、取整对比、常量 | ★★☆ | ⭐⭐ |
| Random | 随机数生成、种子机制、并发随机 | ★★☆ | ⭐⭐⭐ |
| Object 类 | equals/hashCode契约、clone、toString | ★★★★★ | ⭐⭐⭐⭐⭐ |
| 日期时间API | Date、Calendar、java.time(JDK 8) | ★★★★ | ⭐⭐⭐⭐ |
| 大数值运算 | BigInteger、BigDecimal、精度陷阱 | ★★★ | ⭐⭐⭐⭐ |
飞翔科技场景贯穿
小崔是飞翔科技技术部的一名新入职后端开发。他在开发"员工薪资管理系统"的过程中,不断遇到常用类的各种坑:
- String 篇:小崔用
==比较员工姓名,结果出现了诡异的 bug - StringBuilder 篇:白歌 review 代码时指出循环拼接字符串的性能问题
- StringBuffer 篇:孔蓝发现多线程日志模块数据丢失,定位到竞态条件
- 包装类 篇:小崔发现
Integer在某个范围内==比较没问题,超出范围就出错 - Math 篇:计算年终奖时,小崔对
round()和floor()的区别一头雾水 - Random 篇:黄俪开发抽奖系统时发现固定种子导致"黑幕"
- Object 篇:自定义
Employee类放入HashMap后找不到,白歌让他重写equals()和hashCode() - 日期时间 篇:小崔被
SimpleDateFormat的线程安全问题坑了一次生产事故 - 大数值 篇:薪资计算用
double导致精度丢失,被财务部投诉
阅读本章时,请跟着小崔一起从"踩坑"到"填坑",真正理解每一个类的设计原理。
学习路线建议
前置知识:Java 基础语法、面向对象基础(继承、多态)、基础数据结构(数组)。
学习目标:完成本章后,你应该能够:
- 解释 String 不可变性的底层原理,描述常量池的工作机制
- 区分 StringBuilder(单线程高效)与 StringBuffer(多线程安全)的使用场景
- 说出 Integer 缓存范围,解释装箱拆箱的字节码实现
- 熟练使用 Math 常用函数,理解 floor/ceil/round 的区别
- 掌握 Random 的种子机制与高并发场景的替代方案
- 写出正确的
equals()和hashCode()实现 - 使用 JDK 8
java.time包进行日期时间操作 - 用
BigDecimal进行精确的金融计算,避免精度损失
白歌常说:"基础不牢,地动山摇。常用类看似简单,但每个类背后都有深刻的设计考量——理解它们,你才能真正读懂 Java 源码。"