43

为什么 Java char 原始数据类型是 2 个字节,而 C 是 1 个字节,有什么理由吗?

谢谢

4

8 回答 8

59

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

于 2010-10-18T05:20:03.763 回答
24

char在 Java 中是 UTF-16 编码的,每个字符至少需要 16 位的存储空间。

于 2010-10-18T05:13:27.713 回答
12

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

于 2010-10-18T05:28:36.117 回答
7

在以前的语言中,如 C ASCII符号被使用。范围是 127,代表 127 个唯一符号语言字符

而JAVA自带一个叫做“INTERNATIONALIZATION”的特性,就是把所有人类可读的字符(包括区域符号)都加进去了,而且范围也增加了,所以需要更多的内存,统一所有这些符号的系统是“标准 Unicode 系统”,因此这个统一需要 JAVA 中的附加字节。

第一个字节保持原样,ASCII 字符的范围为 127,就像在 C、C++ 中一样,但统一字符比附加到它们。

所以 JAVA 中的 char 为 16 位,C 中的 char 为 8 位。

于 2015-09-18T19:10:25.693 回答
1

Java™ 教程

char 数据类型是单个 16 位 Unicode 字符。它的最小值为“\u0000”(或 0),最大值为“\uffff”(或 65,535,包括在内)。

于 2018-02-11T14:16:15.397 回答
0

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

于 2021-06-21T05:55:42.347 回答
-1

Java用作国际化,因此它在不同的语言中工作并且需要超过一个字节的空间,这就是为什么它在char中占用2字节的空间。例如,中文不能处理一个字节的字符。

于 2015-02-17T17:47:53.737 回答
-2

正如我们所知,c 支持 ASCII,而 java 支持 Unicode,其中包含 3 个东西,即 1-ASCII 2-扩展 ASCII 3-本地语言字符 ASCII 是 unicode 的子集。ASCII 仅支持英语,而 Unicode 支持跨国语言。否则 java字符在使用 2 字节的 UTF-16 中编码。出于所有原因,并且由于 Unicode 是 ASCII 的扩展版本,因此它使用 8 位的 16 位。

于 2016-02-22T04:02:42.347 回答