Java与C中的字符大小

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

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

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

找出你需要查看历史并就此主题得出结论/ 意见的原因。

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

BTW:C可以支持更宽的字符,但这不是普通的char

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

因此,将byte一个字节并将无符号的16位值设为有意义。

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

由于Java使用Unicode,因此C通常默认使用ASCII。

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

Java 2平台在char数组和String和StringBuffer类中使用UTF-16表示。

  • java.lang.Character中
  • java.lang.String中

Java是一种现代语言,因此它默认支持Unicode,就像今天的许多新语言(例如C#)一样。 相比之下,C是7位ASCII时代的“古老”语言,因此它默认使用8位字符。 当进入Unicode时,为了不使旧的代码中断,他们决定使用不同的字符类型wchar_t

Java char是UTF-16编码的unicode代码点,而C在大多数情况下使用ascii编码。