2010-10-18 49 views
26

Java char原始数据类型是不是2字节,而不是C是1字节?为什么Java char原语占用2个字节的内存?

由于

+4

简短的回答是因为他们愚蠢:他们应该使用32位字符。 – tchrist 2011-04-08 12:25:15

+0

不,他们不应该使用32位宽字符。这会让头顶更糟! – vy32 2011-07-04 04:13:58

+6

@ vy32:是的。他们应该使用[6位宽字符](https://en.wikipedia.org/wiki/Six-bit_character_code)。这将节省空间,毕竟大写字母应该足够每个人。 – 2012-07-15 03:41:37

回答

18

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

44

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

+5

我确信Joel会欣赏“每个程序员应该知道字符编码的插件:http://joelonsoftware.com/articles/Unicode.html – fooMonster 2011-11-10 14:56:42

9

在Java中,一个字符被编码在其中UTF-16使用2个字节,而在正常的C字符串是或多或少只是一串字节。当设计C时,使用ASCII(仅涵盖英文字符集)被认为是足够的,而Java设计者已经占据了国际化的位置。如果你想使用Unicode和C字符串,UTF-8编码是首选的方式,因为它具有ASCII作为子集,并且不使用0字节(不像UTF-16),它被用作字符串结束标记C.这样的字符串结束标记在Java中不是必需的,因为字符串在这里是一个复杂的类型,具有明确的长度。

-1

的Java作为国际化的话,它的工作在不同的语言,需要的空间多于一个字节,这就是为什么在字符空间对其采取2字节。 因为例如中文不能处理字节的一个字节。

3

在像C ASCII以前的语言符号被使用。 而范围是127,对于127 独特符号语言字符

虽然JAVA提供了一个名为“国际”特征,也就是所有的人类可读字符(包括区域符号)也被添加进去,和该范围也增加,所以更多的存储器需要系统统一所有这些符号是“Unicode标准体系”,并让 这统一需要JAVA额外的字节。

第一字节保持原样和ASCII字符范围至127如C,C++,但统一字符比附加到他们。

所以在JAVA 16位为炭和在C.

炭8位
-2

正如我们知道的C suppors ASCII其中如Java支持Unicode它含有3-事情是 1-ASCII 2扩展ASCII 3本地语言字符的ASCII 是unicode.ASCII的子集,仅支持其中为Unicode支持跨国公司language.otherwise Java字符是UTF-16使用2 byte.for所有的原因,并为统一内编码英语是ASCII的扩展版本,所以它使用8位的16位。

0

Java™教程: char数据类型是一个单一的16位Unicode字符。它的最小值为'\ u0000'(或0),最大值为'\ uffff'(或65,535)。

相关问题