HOWTO · Java
在 Java 中表示空字符
本文介绍如何在 Java 中处理空字符。
本页内容
Java 没有表示空值的基本类型 char:一个 char 保存一个 UTF-16 代码单元。字面量 '' 无效,因为其中不包含任何字符。可以创建空的 char[],但它是一个含零个元素的数组,并不是一个 char 值。没有文本时使用空 String;需要字符值时,选择一个实际字符,例如空格或 U+0000。
为什么 '' 无效,而空格不同
char 字面量使用单引号,且必须包含一个字符。表达式 char ch = ''; 无法通过编译。相反,' ' 是有效的 char,其中包含一个空格。下面这个小程序会用方括号标出空格,并打印它的数值:
public class CharExample {
public static void main(String[] args) {
char space = ' ';
System.out.println("[" + space + "]");
System.out.println((int) space);
}
}
[ ]
32
方括号能让空格与周围文本区分开来,整数则显示它的字符值。空格在比较和字符串操作中仍然是一个实际字符,因此只有在数据确实需要空白字符时才使用它。
没有字符时使用空 String
当数据表示没有文本时,可以使用 String value = "";。空 String 的长度为零,适用于文本字段、字符串拼接以及要求字符串的 API。它不是 char,因此 Java 不允许将 "" 赋给基本类型 char 变量。空的 char[] 也可以创建,但它表示的是不含元素的序列,而不是一个缺失的字符。
使用 \0 或 \u0000 表示空字符
Java 将 U+0000 写作 \0 或 \u0000;两种写法表示同一个实际的 char 值。U+0000 有时称为空字符(null character),但它并不是空的字符,也通常不会终止 Java String。打印它时可能看起来没有内容;若要查看它实际包含的值,可以检查其数值。它仍占用一个代码单元,并计入 Java 字符串的 length()。
public class NullCharacterExample {
public static void main(String[] args) {
char shortEscape = '\0';
char unicodeEscape = '\u0000';
String value = "A" + shortEscape + "B";
System.out.println(shortEscape == unicodeEscape);
System.out.println((int) shortEscape);
System.out.println(value.length());
}
}
true
0
3
代码会比较这两种写法,将 U+0000 转换为整数,并测量所得字符串的长度。这样便无需依赖终端如何显示字符,也能检查该值。字符串长度为 3,因为其中包含 A、U+0000 和 B。
使用 Character.MIN_VALUE 或让 Character 保存 null
下面这个可运行示例会包装一个字母,并打印它的值以及是否存在的检查结果:
public class CharacterExample {
public static void main(String[] args) {
Character value = Character.valueOf('J');
System.out.println(value);
System.out.println(value == null);
}
}
J
false
Character.MIN_VALUE 是获取 U+0000 的一种具名写法;它并不是另一种独立的空值。只有当数据格式要求使用这个特定字符时,才使用它。也可以让 Character 包装类型保存 null,表示值缺失。这表示引用不存在,并不是一个 char;在拆箱或调用其方法之前,代码必须先检查它是否为 null。
Java 会将 char 类型的实例字段初始化为 U+0000。局部 char 变量没有自动默认值,读取前必须先赋值。没有文本时选择 String;可选字符使用值为 null 的 Character;只有当 U+0000 本身有意义时才使用 \0。