为什么Java char原语会占用2个字节的内存?

rea*_*ber 32 java unicode utf-16 widechar

有没有理由为什么Java char原始数据类型是2字节不像C这是1字节?

谢谢

Mat*_*hen 51

当Java的最初设计,预期任何Unicode字符将适合于2个字节(16位),所以charCharacter进行了相应的设计.实际上,Unicode字符现在最多需要4个字节.因此,内部Java编码UTF-16要求增补字符使用2个代码单元.基本多语言平面中的字符(最常见的)仍然使用1. char每个代码单元使用Java .这篇Sun文章解释得很好.

  • 我确信Joel会喜欢"每个程序员应该知道的关于字符编码的插件:http://joelonsoftware.com/articles/Unicode.html (5认同)

Vij*_*hew 21

char Java中使用UTF-16编码,每个字符至少需要16位存储空间.


Dar*_*ust 9

在Java中,字符以UTF-16编码,使用2个字节,而普通的C字符串或多或少只是一堆字节.当设计C时,使用ASCII(仅涵盖英语字符集)被认为是足够的,而Java设计者已经考虑了国际化.如果要将Unicode与C字符串一起使用,UTF-8编码是首选方法,因为它将ASCII作为子集,并且不使用0字节(与UTF-16不同),它用作字符串结尾C.这样的字符串结束标记在Java中不是必需的,因为字符串在这里是复杂类型,具有明确的长度.


小智 8

以前的语言(如 C) 使用ASCII表示法。范围为 127,代表 127 个独特的符号语言字符

而JAVA有一个叫做“国际化”的功能,那就是所有人类可读的字符(包括区域符号)也被添加进去,并且范围也增加了,所以需要更多的内存,统一所有这些符号的系统是“标准Unicode系统”,因此这种统一需要JAVA中的附加字节。

第一个字节保持原样,ASCII 字符范围为 127,与 C、C++ 中一样,但会附加统一字符。

因此,JAVA 中的 char 为 16 位,C 中的 char 为 8 位。