如果我用 Java 写这个:
String s = "abc";
s在内存中只占用3个字节吗?
如果为 true,JVM 如何找到 String 对象的末尾?
这会占用更多内存字节吗?
简短的回答:不,绝对不是。 众所周知,JVM 字符串非常重;该对象不仅包含指向字符数组的指针,还包含其长度。 并且内部存储使用 UTF-16 代码点,因此您的问题可能是“它需要 6 个字节吗?” :-)
JVM 的技术参考将为您提供字符串对象的准确大小。 您还可以找到一些有趣的博客文章例如这篇文章和技术文章。
字符串对象的确切大小问题还有很多内容。 我们可以压缩对象指针、字符串驻留等。还有一个事实是,由于字符串是不可变的,因此我们经常共享字符串内存,例如当您调用
substring
时就会发生这种情况。
但是,始终正确的是:它超过 3 个字节。
最小字符串内存使用量(字节)= 8 * (int) ((((字符数) * 2) + 45) / 8)