Java中为什么可以⽤⼀个char(两个字节)表⽰⼀个中⽂字符  ⽐如这断程序:
char word = '字';
System.out.println("字".getBytes().length);       // 输出为 3
其输出结果为3,⼩伙伴们就要问了:“奇怪了,'字'这个字符,明明是三个字节,怎么可以⽤char类型的变量来表⽰? char类型不是在java 中是两个字节么?”
  其实,java中有外码和内码之分,顾名思义,外码就是JVM外部使⽤的编码,⽐如你在编辑器中输⼊的“字”,假设是UTF-8编码,UTF-8是变长编码,⼀个中⽂可能是1-3个字节来表⽰;那么,在JVM中,⽤的都是Unicode码,这是定长编码,所有字符都统⼀使⽤两个字节表⽰,这就是Java的内码。
  "字".getBytes()  JVM执⾏这段逻辑,实际是进⾏了编码转换的,可以看String的源码实现:
public byte[] getBytes() {
de(value, 0, value.length);    // 调⽤de()     
}
字符串转数组char
static byte[] encode(char[] ca, int off, int len) {
String csn = Charset.defaultCharset().name();      // 这⾥,Charset.defaultCharset()默认是UTF-8
try {
// use charset name encode() variant which provides caching.
return encode(csn, ca, off, len);
} catch (UnsupportedEncodingException x) {
warnUnsupportedCharset(csn);
}
可以看到,Java把字符串"字"(字符串就是char的数组), 编码为UTF-8 ,转为UTF-8的“字”,它的长度就变成了3个字节哦。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。