字符大小为8位还是16位?

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 ,那么编码forms中的单个Java char的长度将取决于该值。

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

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

有一种现代的方式来学习它的大小。 只需打印BYTES

 System.out.println(Character.BYTES); 

结果是2