char类型原本用于表示一个字符。不过随着字符种类的扩充,如今一些Unicode字符则需要两个char值。
char类型的字面量值需要用单引号括起来,而非是双引号。'A'是编码值为65所对应的字符常量。"A"是指包含一个字符的字符串。char 类型的值可以表示为十六进制值,其范围从 \u0000 到 \uffff 。
\u是一种转义序列。另外,下图是特殊字符的转义序列。
Java设计采用16 位的 Unicode 字符集,这样会比使用 8 位字符集的程序设计语言有很大的改进。如今,Unicode 字符超过了 65 536 个,其主要原因是增加了大量的汉语、 日语和韩语中的表意文字。现在, 16 位的 char 类型已经不能满足描述所有 Unicode 字符的需要了。
Unicode 的码点可以分成 17 个代码级别 (code plane)。第一个代码级别称为基本的多语言级别 (basic multilingual plane ), 码点从 U+0000 到 U+FFFF, 其中包括经典的 Unicode 代码;其余的 16个级别码点从 U+10000 到 U+10FFFF , 其中包括一些辅助字符(supplementary character)。
UTF-16 编码采用不同长度的编码表示所有 Unicode 码点。除辅助字符外,其他字符使用一个代码单元表示也就是16位。辅助字符则需要一对代码单元。通过巧妙的设计,可以根据第一个代码单元区分出是单个字符,还是辅助字符的第一个代码单元。例如,⑪是八元数集的一个数学符号,码点为 U+1D546, 编码为两个代码单兀 U+D835 和U+DD46。
所以来说采用UTF-16编码的char类型需要2字节或4字节的存储空间。