关于 String 有两个流传很广的说法:JDK 9 之后引入了 Compact Strings,纯拉丁字符的字符串用 1 个字节存一个字符,含其他字符才用 2 个字节;String 是不可变的。这次用本机的 OpenJDK 17 逐个验证:用反射读出 String 内部的 value(byte)
HashMap 的扩容有几个流传很广的说法:默认容量 16、负载因子 0.75、放到第 13 个元素扩容、扩容后节点"重新计算位置"。这次不背,全部在本机的 OpenJDK 17 里用反射读 HashMap 内部的 table 和 threshold 字段,逐个 put 地看:table 什么时候