最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
坚持看完这套JDK源码系列-彻底告别CRUD开发|深度解析:java.lang.String源码精讲
时间:2026-05-28 09:25:01 编辑:袖梨 来源:一聚教程网
String类是Java中最核心的不可变字符序列,其设计理念深刻影响着JVM性能优化与安全机制。本文将深入解析其源码实现与演进历程。
一、类概述
String作为Java最常用的类,其不可变特性为字符串常量池、哈希缓存等机制提供了基础保障。
继承体系:直接继承自Object基类
接口实现:支持Serializable、Comparable<String>和CharSequence
类声明:通过public final class String确保不可继承
核心功能:提供线程安全的不可变文本表示方案
二、关键字段与常量
JDK 9+ 的内存布局变化
// JDK 17 源码(java.lang.String)// 核心字段:存储字符的字节数组
private final byte[] value;// 编码标志:0 = LATIN1(每字符1字节),1 = UTF16(每字符2字节)
private final byte coder;// 哈希值缓存,默认 0,延迟计算
private int hash;// 是否为哈希值 0(极少数真实哈希为 0 的情况下标记用)
private boolean hashIsZero;// 编码常量
static final byte LATIN1 = 0;
static final byte UTF16 = 1;
三、核心构造方法与静态工厂
// 1. 字面量(最常用,走常量池)
String s1 = "hello";// 2. 从 char 数组构造(会复制数组,保证不可变性)
char[] chars = {'h', 'e', 'l', 'l', 'o'};
String s2 = new String(chars);// 3. 从字节数组 + 指定字符集构造
byte[] bytes = "hello".getBytes(StandardCharsets.UTF_8);
String s3 = new String(bytes, StandardCharsets.UTF_8);// 4. 从 StringBuilder / StringBuffer 构造
StringBuilder sb = new StringBuilder("hello");
String s4 = new String(sb);// 5. 静态工厂 valueOf(对 null 友好,返回 "null"")
String s5 = String.valueOf(42); // "42"
String s6 = String.valueOf((Object)null); // "null"(不抛 NPE)
四、核心方法源码级解析
4.1 equals(Object anObject) — 值相等的判断
public boolean equals(Object anObject) {
// 优化1:引用相等直接返回 true(同一对象必然内容相同)
if (this == anObject) {
return true;
}
// 优化2:快速类型检查,非 String 直接返回 false
return (anObject instanceof String aString)
&& (!COMPACT_STRINGS || this.coder == aString.coder)
&& StringLatin1.equals(value, aString.value); // 或 StringUTF16.equals
}
实现原理:
优先进行引用地址比对,提升常量池对象判断效率
通过模式匹配同时完成类型检查和转换
编码格式不一致时直接判定不相等
最终委托给底层字节数组比较方法
4.2 hashCode() — 哈希值缓存机制
public int hashCode() {
int h = hash;
if (h == 0 && !hashIsZero) {
// 延迟计算:第一次调用时才计算
h = isLatin1() ? StringLatin1.hashCode(value)
: StringUTF16.hashCode(value);
if (h ==
相关文章
- POKI.免费游戏免下载畅玩-POKI.免费游戏全端同步 05-28
- laravel 实现阿里云oss文件上传功能的示例 05-28
- 删除PHP数组中的重复元素的实现代码 05-28
- DBeaver怎样连接HBase数据库 05-28
- ubuntu下securecrt脚本录制方法详解 05-28
- 《梦幻西游》挤线器推荐-光速挤线器稳定高效 05-28