关于java:Char大小是8位还是16位?

Char size 8 bit or 16 bit?

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html,字符大小为16位,即2个字节。
不知何故,我想起了它的8位,即1个字节。 为了消除我的疑问,我创建了一个包含单个字符" a"的文本文件
并保存。 然后我检查了文件的大小,它的1个字节即8位。 我很困惑
性格? 如果它的2个字节,为什么文件大小是1个字节,如果它是1个字节,为什么链接说2个字节?


Java中的char是UTF-16代码单元。它不一定是完整的Unicode字符,但实际上是16位无符号整数。

当您将文本写入文件(或以其他方式将其转换为字节序列)时,数据将取决于您使用的编码。例如,如果您使用ASCII或ISO-8859-1,那么您可以写哪些字符就非常受限制,但是每个字符只能是一个字节。如果使用UTF-16,则每个Java char都将转换为正好两个字节-但某些Unicode字符可能会占用四个字节(由两个Java char值表示的字符)。

如果使用UTF-8,那么即使是单个Java char的编码形式,其长度也将取决于该值。


有一种当代的方法来了解其大小。只需使用BYTES打印。

1
System.out.println(Character.BYTES);

结果为2


Java中的char是2个字节大(如有效值范围所示)。但这并不一定意味着一个字符的每个表示都长2个字节。例如,许多编码只会为每个字符保留1个字节(或为最频繁的字符使用1个字节)。如果平台默认编码是1字节编码(例如ISO-8859-1)或可变长度编码(例如作为UTF-8,它可以轻松地将1个字节转换为单个字符。


请注意,文本文件确实具有与之关联的格式/字符集。文本文件通常以UTF-8格式保存,即每个字符8位,除非该字符是"特殊"字符。