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 来表示的。
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 来表示的。