📖 前言导读
Java常用API是日常开发使用率最高、面试细节考点最多、隐性坑点最密集 的基础模块,贯穿所有业务开发场景。大部分开发者长期凭经验使用API,不了解底层差异、性能优劣、适配场景,极易出现代码冗余、精度问题、线程安全隐患,面试也常因细节失分。本篇系统性整理字符串、时间工具、数学工具、集合工具等高频API,深度解析底层原理、性能对比、使用规范与避坑技巧,搭配实战案例与面试真题,规范代码写法、规避生产Bug、搞定API细节面试考点,全面提升代码质量与面试得分率。
一、字符串核心API底层详解
📌 必考指数:★★★★★
String、StringBuilder、StringBuffer是日常开发最高频字符串工具类,三者底层结构、线程安全、性能差异是面试必考细节,也是生产代码高频出错点。
1、三者核心区别
-
String:不可变字符串,底层final字符数组,每次拼接生成新对象,线程安全、性能差,适合少量固定字符串
-
StringBuilder:可变字符串,底层动态数组,线程不安全、性能极高,适合单线程频繁拼接
-
StringBuffer:可变字符串,方法加锁,线程安全、性能偏低,适合多线程字符串拼接场景
2、字符串常量池原理
JVM字符串常量池用于缓存字符串字面量,避免重复创建对象,节省内存。直接赋值字符串会进入常量池,new String会创建堆对象+可能创建常量池对象,==比较比较地址,equals比较内容,是高频面试坑点。
二、JDK8全新时间API
📌 必考指数:★★★★★
传统Date、Calendar类存在线程不安全、API繁琐、时区混乱、格式化缺陷等问题,JDK8推出全新时间API,彻底解决传统时间类痛点,是现代开发标准选型。
-
LocalDate:仅获取年月日,无时间
-
LocalTime:仅获取时分秒,无日期
-
LocalDateTime:获取完整年月日时分秒,开发最常用
-
DateTimeFormatter:线程安全时间格式化工具,替代SimpleDateFormat
核心优势:不可变、线程安全、API简洁、时区精准,生产开发强制优先使用JDK8时间API。
三、高精度数值与工具类API
📌 必考指数:★★★★
1、BigDecimal高精度运算
double、float存在精度丢失问题,金融、支付、统计等高精度场景必须使用BigDecimal。核心避坑:优先使用字符串构造、设置保留位数、指定舍入模式,避免精度错乱。
2、常用工具类规范
-
Math:数学运算工具类,静态方法调用,支持四舍五入、最值、随机数
-
Collections:集合工具类,提供集合排序、空判断、同步转换方法
-
Objects:通用工具类,优雅空判断、equals比较,规避空指针异常
四、自动装箱与拆箱
📌 必考指数:★★★★
装箱:基本类型自动转为包装类;拆箱:包装类自动转为基本类型。JDK提供包装类缓存机制,Integer缓存-128~127数值,区间内对象复用、地址一致,区间外新建对象,是面试高频坑点。
五、本篇高频面试真题(必背)
1、String、StringBuilder、StringBuffer区别?
1、可变性:String不可变,后两者可变;2、线程安全:String、StringBuffer安全,StringBuilder不安全;3、性能:StringBuilder性能最优,String最差;4、场景:少量固定字符串用String,单线程频繁拼接用StringBuilder,多线程拼接用StringBuffer。
2、为什么废弃传统Date,使用JDK8时间API?
传统Date、SimpleDateFormat线程不安全、API繁琐、时区处理混乱、易出现时间偏移。JDK8时间API基于不可变设计,线程安全、API简洁、分区明确、格式化稳定,彻底解决传统时间类所有痛点,是生产开发标准选型。
3、BigDecimal使用避坑点有哪些?
1、禁止使用double构造BigDecimal,会导致精度丢失;2、必须指定保留小数位数与舍入模式;3、比较数值优先使用compareTo,禁止equals;4、运算后及时赋值,BigDecimal不可变,运算产生新对象。
📝 本篇章节小结
本篇全覆盖字符串API、JDK8时间体系、高精度运算、工具类用法、装箱拆箱 高频考点与生产规范。重点掌握字符串三剑客差异、新时间API优势、BigDecimal避坑、缓存机制,规范日常代码写法,规避高频生产Bug与面试细节失分,全面提升代码规范性与面试细节得分能力。