java char

char在Java中应该是16个字节 
byte在Java中应该是8个字节 
char x = '编'; //这样是合法的,输出也是16个字节 


但是 
String str = "编"; 
byte[] bytes = str.getBytes(); //我想不明白,为什么这里要占用3个byte呢? 
3个byte一共是3*8=24个bit,那么char x怎么又放得下?我坚信char是16个字节, 
但是str.getBytes()这个东西到底又怎么回事?


byte[] bytes = str.getBytes();之后是3个字节,这里和前面的概念不一样。java是用unicode来表示字符,"编"这个中文字符的unicode就是2个字节。
String.getBytes(encoding)方法是获取指定编码的byte数组表示,通常gbk/gb2312是2个字节,utf-8是3个字节。
如果不指定encoding则取系统默认的encoding.
要搞清楚 code point 和 encoding 的区别。Java 是遵循 unicode 4.0 标准的,而内部的 character 以 utf-16 作为 encoding。unicode 4.0 标准包含从 U+0000-U+FFFF 
的基本多语言平面和 U+10000-U+10FFFF 的扩展平面的文字,这是 code point。Java 的 char 类型是 16 bit 的,所以单个 char 只支持基本平面内的文字,
而扩展平面的文字是由一对 char 来表示的。 

你可能感兴趣的:(java char)