字符

字符

大多数情况下,若使用单字符值,则采用 char 类型。例如:

char ch = 'a';
// Unicode for uppercase Greek omega character
char uniChar = '\u03A9';
// an array of chars
char[] charAarray = {'a', 'b', 'c', 'd', 'e'};

然而,有时你需要将字符作为对象使用——例如作为方法参数时,该参数要求传入对象。Java编程语言为此提供了一个包装类,它将字符”包装”成Character对象。Character类型的对象包含一个字段,其类型为字符。该Character类还提供了一系列有用的类方法(即静态方法)来操作字符。

你可以使用字符构造函数创建一个字符对象:

Character ch = new Character('a');

在某些情况下,Java编译器也会为你创建Character对象。例如,当你将原始char类型传递给期望接收对象的方法时,编译器会自动将char转换为Character。此功能称为autoboxing——若转换方向相反,则称为unboxing。有关自动装箱和拆箱的更多信息,请参阅”自动装箱与拆箱”章节。

注意:Character类是不可变的,因此一旦创建,Character对象就无法被修改。
下表列出了 Character 类中一些最实用的方法,但并非详尽无遗。如需查看该类所有方法的完整列表(超过50个),请参阅 Character API 规范。

字符和码点

Java平台自JDK 1.0.2起便支持Unicode标准。Java SE 15支持Unicode 13.0。char数据类型和Character类基于原始Unicode规范,该规范将字符定义为固定宽度的16位实体。此后Unicode标准已修订,允许存在需要超过16位表示的字符。合法码点的范围现为U+0000至U+10FFFF,称为Unicode标量值。

字符值采用16位编码,因此可表示 0x00000xFFFF 之间的数值。这组字符有时被称为 Basic Multilingual Plane(BMP)。代码点大于 0xFFFF(记为U+FFFF)的字符称为 supplementary characters

因此,一个char值代表 Basic Multilingual Plane(BMP)中的码点。一个int值则代表所有Unicode码点,包括补充码点。除非另有说明,否则对补充字符和代理字符值的行为如下:

  • 仅接受 char 值的方法无法支持补充字符。它们将来自代理范围的char值视为未定义字符。
  • 接受 int 值的方法支持所有Unicode字符,包括补充字符。

有关更多信息,请参阅 Character 类的文档。

转义序列

以反斜杠 \ 开头的字符是转义序列,对编译器具有特殊含义。下表列出了 Java 转义序列:

转义序列 含义
\t 在此处插入一个制表符(tab)。
\b 在此处文本中插入一个退格符(backspace)。
\n 在此处文本中插入换行符(line feed)。
\r 在此处文本中插入回车符(carriage return)。
\f 在此处文本中插入换页符(form feed)。
\' 在此处插入单引号字符(')。
\" 在此处插入双引号字符(")。
\\\ 在此处插入反斜杠字符(\)。

当打印语句中遇到转义序列时,编译器会进行相应处理。例如,若要在引号内嵌套引号,必须在内部引号处使用转义序列”,。要打印句子

She said "Hello!" to me.

必须使用如下代码:

IO.println("She said \"Hello!\" to me.");