Java String 内部表示

标签 java string encoding utf-16

据我所知,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,它是 StringUTF-16 表示的一部分

关于Java String 内部表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35032018/

相关文章:

java - 我们在java中有像c这样的条件编译吗?

java-当我在构造函数中调用一个方法时会发生什么?

java - PGpoint Hibernate(反)序列化异常

xml - Node.js HTTP 客户端中的自动 UTF-8 编码

javascript - Android 中的 Uri.encode() 是否等同于 Javascript 中的 encodeURIComponent()?

java - Mysql连接线程是否安全

c# - 在C#中将字符串转换为位图

c++ - 如何在C++中输入一个字符串数组

C - 在不重新分配内存的情况下将 C 字符串拆分为单词

python - 在 Python 2.7 中表示 µs