常用类深度指南:String/Builder、Objects、Math、Random 与 Locale
大约 2 分钟
常用类深度指南:String/Builder、Objects、Math、Random 与 Locale
新手先看 · 一屏速览
- 字符串不可变;频繁拼接用 StringBuilder
- Money 用 BigDecimal;Random 与安全相关用 SecureRandom
- Locale/Charset 显式指定,避免不同环境表现不一致
1. String:不可变、常量池与编码
- 不可变的好处:线程安全、可缓存、哈希稳定;代价是拼接成本
- 常量池:字面量与 intern();谨慎避免无意义的池污染
- 编码:UTF-16 内部表示;与外部世界交互时显式指定 Charset
String a = "ab" + "cd"; // 编译期常量折叠
String x = "ab"; String y = "cd";
String b = x + y; // 运行期构建,等价 StringBuilder2. StringBuilder vs StringBuffer
- StringBuilder:非线程安全,性能更好;StringBuffer:同步开销更大
- 绝大多数场景使用 StringBuilder;并发拼接应改为局部构建后合并
3. Objects 与比较
Objects.requireNonNull(arg, "arg");
Objects.equals(a, b); // null 安全比较
Comparator.comparing(User::getAge).thenComparing(User::getName);4. Math、BigDecimal 与舍入
- Math 提供基础函数;金额与高精度运算使用 BigDecimal
- BigDecimal 舍入策略:HALF_UP/HALF_EVEN 等;统一在业务层封装
5. Random vs SecureRandom
最近建一些几十个工作内推群,各大城市都有,群里目前已经收集了很多内推岗位,大厂、中厂、小厂、外包都有。 欢迎HR、开发、测试、运维和产品加入。

扫描下方微信,备注:网站+所在城市,即可拉你进工作内推群。

java.util.Random适合模拟/抽样;不适合安全用途java.security.SecureRandom用于令牌、验证码等安全场景
SecureRandom sr = new SecureRandom();
byte[] token = new byte[32];
sr.nextBytes(token);6. Locale/Charset/Collator
- 国际化时显式指定 Locale(大小写转换、排序、格式化)
- Charset 显式 UTF-8;文件与网络交互避免平台默认值
"i".toUpperCase(Locale.ROOT);7. 实战清单与反模式
- 清单:拼接用 StringBuilder;外部交互指定 Charset;安全用 SecureRandom;金额用 BigDecimal
- 反模式:在热路径频繁
+拼接;混用平台默认 Locale/Charset;用 Random 生成安全令牌
8. 练习
- 实现安全令牌生成工具,支持 Base64/Hex 输出
- 封装 Money 与舍入策略,提供格式化与解析
