Java 与 C 中的字符大小

2022-09-03 10:15:29

为什么 Java 中的字符存储空间是 C 中字符的两倍?


答案 1

在Java中,字符是16位,C是8位。

一个更普遍的问题是,为什么会这样?

找出为什么你需要回顾历史并就该主题得出结论/意见

当C在美国开发时,ASCII在那里是相当标准的,你只需要7位,但是有了8位,你也可以处理一些非ASCII字符。这似乎绰绰有余。许多基于文本的协议,如SMTP(电子邮件),XML和FIX,仍然只使用ASCII字符。电子邮件和 XML 对非 ASCII 字符进行编码。二进制文件、套接字和流仍然只有 8 位字节的本机。

顺便说一句:C可以支持更广泛的字符,但这并不简单char

当Java被开发时,16位似乎足以支持大多数语言。从那时起,unicode已经扩展到65535以上的字符,Java不得不添加对代码点的支持,这是UTF-16字符,可以是一个或两个16位字符。

因此,在当时,创建一个字节和一个无符号的16位值是有意义的。bytechar

顺便说一句:如果您的JVM支持,它可以使用字节而不是字符来表示仅使用8位字符的字符串。-XX:+UseCompressedStrings


答案 2

因为 Java 使用 Unicode,所以 C 通常默认使用 ASCII。

Unicode 编码有多种类型,但 Java 使用 UTF-16,每个字符使用一个或两个 16 位代码单元。ASCII 始终为每个字符使用一个字节。