引子
相信每个 Javaer 都遇到过这个问题:String abc = new String("123");
创建了几个对象?其作为八股文已是老生常谈,考究的是大伙对对象创建以及字符串在 JVM 中的存储理解。本篇文章就来深入探讨下 String 方方面面的问题。
String 内部结构
char[] -> byte[]
String 内部原本使用一个 char[] value
存储字符,若不是”版本任你更,我用 Java 8“ 的钉子户,应该能发现从 JDK 9 开始,它就变成了 byte[] value
。这么做的目的主要是为了减少字符串占用的内存,减少 GC 次数。(详见参考资料JEP 254)