我在 Java 的内部表示中搜索了字符串,但我得到了两种看起来可靠但不一致的材料。
一个是:
http://www.codeguru.com/cpp/misc/misc/multi-lingualsupport/article.php/c10451
它说:
Java 使用 UTF-16 进行内部文本表示,并支持对 UTF-8 进行非标准修改以进行字符串序列化。
另一个是:
它说:
Tcl 也使用与 Java 相同的修改后的 UTF-8[25] 来对 Unicode 数据进行内部表示,但对外部数据使用严格的 CESU-8。
修改后的 UTF-8?还是UTF-16?哪一个是正确的? Java 在内存中为一个字符使用了多少字节?
请让我知道哪一个是正确的以及它使用了多少字节。
原文由 Johnny Lim 发布,翻译遵循 CC BY-SA 4.0 许可协议
Java 中 String 和 StringBuilder 等的表示是 UTF-16
https://docs.oracle.com/javase/8/docs/technotes/guides/intl/overview.html
在 JVM 级别,如果您正在使用
-XX:+UseCompressedStrings
(这是 Java 6 的某些更新的默认设置)实际的内存表示可以是 8 位,ISO-8859-1 但仅适用于字符串不需要UTF-16编码。http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html
序列化字符串默认使用 UTF-8。
A
char
始终是两个字节,如果您忽略对象中填充的需要。注意:一个代码点(允许字符 > 65535)可以使用一个或两个字符,即 2 或 4 个字节。