据我所知,Java 对 String 的内部表示是 UTF-16。 What is java string representation?
此外,我知道在 UTF-16 字符串中,每个“字符”都使用一个或两个 16 位代码单元进行编码。
但是,当我调试下面的java代码时
String hello = "Hello";
变量 hello 是一个 5 字节的数组 0x48, 0x101, 0x108, 0x108, 0x111 这是“你好”的 ASCII。
这怎么可能?
最佳答案
我用这段代码获取了一个迷你 java 进程的 gcore 转储:
class Hi {
public static void main(String args[]) {
String hello = "Hello";
try {
Thread.sleep(60_000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
并在 Ubuntu 上做了一个 gcore
内存转储。 (使用 jps
获取 pid
并将其传递给 gcore)
如果使用 Hexeditor 在转储中找到:48 65 6C 6C 6F
,那么它在内存中的某处为 ASCII。
还有 48 00 65 00 6C 00 6C
,它是 String
的 UTF-16
表示的一部分
关于Java String 内部表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35032018/