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

时间:2010-10-18 05:11:22

标签: java unicode utf-16 widechar

为什么Java char原始数据类型是2个字节,而不像C是1个字节?

由于

8 个答案:

答案 0 :(得分:48)

最初设计Java时,预计任何Unicode字符都适合2个字节(16位),因此charCharacter是相应设计的。实际上,Unicode字符现在最多需要4个字节。因此,内部Java编码UTF-16要求增补字符使用2个代码单元。基本多语言平面中的字符(最常见的)仍然使用1.每个代码单元使用Java char。这Sun article解释得很清楚。

答案 1 :(得分:20)

Java中的

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

答案 2 :(得分:9)

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

答案 3 :(得分:4)

在以前的语言中使用C ASCII 表示法。 对于127个独特符号语言字符,范围为127。

虽然JAVA附带了一个名为“INTERNATIONALIZATION”的功能,但所有人类可读字符(包括区域符号)也会被添加进入它,并且范围也增加了,所以需要更多的内存,系统统一所有这些符号是“标准Unicode系统”,所以 此统一需要JAVA中的其他字节。

第一个字节保持不变,ASCII字符的范围为127,如C,C ++,但统一字符不会附加到它们。

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

答案 4 :(得分:0)

Java™ Tutorials

  

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

答案 5 :(得分: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 个字节用于字符

而 C/C++ 仅使用 ASCII 表示 => 1 个字节的字符

答案 6 :(得分:-1)

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

答案 7 :(得分:-2)

正如我们所知,c支持ASCII,其中java支持包含3个内容的Unicode 1-ASCII 2扩展ASCII 3种本地语言特征 ASCII是unicode的子集.ASCII仅支持英语,因为Unicode支持跨国语言。其他java字符在UTF-16中编码,使用2个字节。由于所有原因,因为Unicode是ASCII的扩展版本,所以它使用16位的8位内存。