char类型原本用于表示单个字符。不过,现在的情况已经有所变化。如今,有些Unicode字符可以用一个char值(代码单元)描述,另外一些Unicode的字符则需要两个char值。原因如下:
码点(code point)是指与一个编码表中的某个字符对应的代码值。在Unicode标准中,码点采用十六进制书写,并加上前缀U+,例如U+0041就是A的码点。Unicode码点可以分成17个代码级别(code plane)。第一个代码级别称为基本的多语言级别(basic multilingual plane),码点从U+0000到U+FFFF,其中包括经典的Unicode代码;其余的16个级别码点从U+10000到U+10FFFF,其中包括一些辅助字符。
UTF-16编码采用不同长度的编码表示所有的Unicode码点。在基本的多语言级别中,每个字符用16位表示,通常被称为代码单元;而辅助字符则采用一对连续的代码单元进行编码。
在Java中,char类型描述了UTF-16中的一个代码单元。
我们强烈建议不要在程序中使用char类型,除非确实需要处理UTF-16代码单元。