对Java String类的源码的理解
一、类概述与核心特性1.不可变性String被final修饰内部储存字符数组属于final即常量一旦创建无法修改2.UTF-16编码以 UTF-16 格式表示字符串其中em补充字符/em由em代理对/em表示3.接口实现java.io.Serializable, ComparableString, CharSequence, Constable, ConstantDesc。二、核心内部字段1.value储存字符的地方2.coder标识value的编码格式3.hash缓存哈希是否实际计算为零避免重复计算。三、核心构造方法1.空构造不可变构造不必要但可直接共享空字符串的value和coder安全性高2.拷贝构造直接引用原字符串的valuecoderhash3.char[]构造如果可能将char[]压缩为byte[],否则用UTF-16 存储4.byte[]Charset构造用指定字符集解码字节数组为字符串。四、核心常用方法1.长度与空判断length()和isEmpty();2.相等性比较先检查是否是同一对象再检查是否是String类型且编码(coder)相同最后用StringLatin1.equals比较字节数组内容。3.子串截取先检查索引边界若截取整个字符串直接返回自身否则复制对应范围的字节数组创建新String。4.字符串拼接工具类处理5.字符串去空白现在主用更精准的strip()五、总结String类型主要有不可变性的性质好处有线程安全、可安全共享如常量池、哈希值可缓存等。且深刻体现了 “不可变设计”“性能优化压缩、缓存” 和 “Unicode 兼容性” 的工程思想。