编码之JVM之外与之内

2019-10-06  本文已影响0人  逗比喵喵

JVM之外

在 JVM 之外, .java 文件可以采用多种编码格式:

当将源码用 Javac 编译的时候, 默认是按照系统默认的编码格式读取 Java 源文件,
然后以 UTF-8 的格式输出到 .class 字节码文件中
.

换句话说:

JVM之内

当运行代码时, 读入到内存里的字符(char)或字符串(String), 实质上都是用 char 来表示的(String 实质是 char[]), 而 char 是采用 UTF-16 来编码的.

但需要注意, char 永远是 2 个字节. 但对于超过 2 个字节的 UTF-16 编码的字符来说. 需要多个 char 来表示. 比如 emoji 表情. 比如某些 APP 输入框输入表情占用了 2 个字符. 就是字符串长度不等于字符长度的问题!

String a = new String(new byte[]{(byte)0xF3, (byte)0x3F, (byte)0xF2, (byte)0x2F});
System.out.println(a);
System.out.println(a.toCharArray().length); // 输出 2

输出 2, 也就是 2 个 char 即 4 个字节.

总结

上一篇下一篇

猜你喜欢

热点阅读