为什么 Java char 原始数据类型是 2 个字节,而 C 是 1 个字节,有什么理由吗?
谢谢
最初设计 Java 时,预计任何 Unicode 字符都适合 2 个字节(16 位),因此char
并Character
相应地进行了设计。事实上,一个 Unicode 字符现在最多需要 4 个字节。因此,内部 Java 编码 UTF-16 要求补充字符使用 2 个代码单元。基本多语言平面中的字符(最常见的)仍然使用 1。char
每个代码单元都使用 Java。Sun 的这篇文章很好地解释了这一点。
char
在 Java 中是 UTF-16 编码的,每个字符至少需要 16 位的存储空间。
在以前的语言中,如 C ASCII符号被使用。范围是 127,代表 127 个唯一符号和语言字符。
而JAVA自带一个叫做“INTERNATIONALIZATION”的特性,就是把所有人类可读的字符(包括区域符号)都加进去了,而且范围也增加了,所以需要更多的内存,统一所有这些符号的系统是“标准 Unicode 系统”,因此这个统一需要 JAVA 中的附加字节。
第一个字节保持原样,ASCII 字符的范围为 127,就像在 C、C++ 中一样,但统一字符比附加到它们。
所以 JAVA 中的 char 为 16 位,C 中的 char 为 8 位。
char 数据类型是单个 16 位 Unicode 字符。它的最小值为“\u0000”(或 0),最大值为“\uffff”(或 65,535,包括在内)。
Java 使用接受世界上所有语言格式的 UNICODE(通用代码)表示。
ASCII American Standard Code for Information Exchange
ISO 8859-1 for western European Countries
KOI-8 for Russian
GB10830 & BIG-5 for Chinese
在这 1 个字节为 ASCII 保留,剩余的 1 个字节可以接受任何其他语言 => 2 个字节用于 char
而 C/C++ 仅使用 ASCII 表示 => 1 字节的 char
Java用作国际化,因此它在不同的语言中工作并且需要超过一个字节的空间,这就是为什么它在char中占用2字节的空间。例如,中文不能处理一个字节的字符。
正如我们所知,c 支持 ASCII,而 java 支持 Unicode,其中包含 3 个东西,即 1-ASCII 2-扩展 ASCII 3-本地语言字符 ASCII 是 unicode 的子集。ASCII 仅支持英语,而 Unicode 支持跨国语言。否则 java字符在使用 2 字节的 UTF-16 中编码。出于所有原因,并且由于 Unicode 是 ASCII 的扩展版本,因此它使用 8 位的 16 位。