12. Java 详解字符和字符串字面量
在 Java 中,字符(char
)和字符串(String
) 都可以使用 Unicode(UTF-16)字符。此外,Java 还支持特殊转义序列(Escape Sequences),可以在代码中表示特殊字符。
1️⃣ char
和 String
字面量
✅ char
(单字符)
- 必须用单引号
'
括起来 - 只能存储一个字符
- 使用 16 位 Unicode 存储
char letter = 'A';
char digit = '5';
char symbol = '$';
char chinese = '你'; // ✅ Unicode 字符
char unicodeChar = '\u0041'; // ✅ Unicode 转义,等于 'A'
✅ String
(字符串)
- 必须用双引号
""
括起来 - 可以包含多个字符
- 是
java.lang.String
类的实例
String message = "Hello, Java!";
String unicodeText = "S\u00ED Se\u00F1or"; // Sí Señor
⚠ char
和 String
不能直接互换
char c = 'A';
String s = "A";
System.out.println(c == s); // ❌ 编译错误
✅ 正确方式
System.out.println(String.valueOf(c).equals(s)); // ✅ true
2️⃣ Unicode 转义(Unicode Escape Sequences)
Java 支持任何 Unicode 字符,可以直接在代码中写入或使用 \uXXXX
转义:
char euro = '€'; // ✅ 直接使用
char euroUnicode = '\u20AC'; // ✅ Unicode 转义
System.out.println(euro == euroUnicode); // ✅ true
✅ 示例
System.out.println("\u0108"); // 大写 C
System.out.println("\u59da\u946b"); // 姚鑫
⚠ 注意
-
\uXXXX
必须是 4 位十六进制数 -
\u
转义可以用于任何地方,不仅限于char
或String
int age = '\u59da'; // ✅ 等价于 23002;
int yx = 0x59da; // ✅ 等价于 23002;
System.out.println(age); // ✅ 输出 23002
System.out.println(yx);
3️⃣ 特殊转义序列(Escape Sequences)
Java 支持多个特殊字符的转义:
转义字符 | 描述 | 示例 |
---|---|---|
\b |
退格符(Backspace) |
"ABC\bD" → "ABD"
|
\t |
制表符(Tab) |
"A\tB" → "A B"
|
\n |
换行符(New Line) | "Hello\nWorld" |
\f |
换页符(Form Feed) | "A\fB" |
\r |
回车符(Carriage Return) | "Hello\rWorld" |
\" |
双引号 | "She said, \"Hello\"" |
\' |
单引号 | 'A' |
\\ |
反斜杠 | "C:\\Users\\" |
✅ 示例
System.out.println("Hello\tWorld"); // "Hello World"
System.out.println("Hello\nWorld"); // 换行
System.out.println("She said: \"Java is awesome!\""); // She said: "Java is awesome!"
System.out.println("Path: C:\\Users\\Admin"); // Path: C:\Users\Admin
4️⃣ null
字面量(null
Literal)
-
null
表示“没有对象” - 适用于引用类型,但不能赋值给基元类型
String name = null; // ✅ 可以赋值
Integer number = null; // ✅ 可以赋值(包装类)
⚠ 错误示例
int num = null; // ❌ 编译错误(基元类型不能是 null)
✅ null
的常见用法
if (name == null) {
System.out.println("Name is not set");
}
5️⃣ class
字面量(Class Literals)
Java
允许获取某个类的 Class
对象,语法是 ClassName.class
:
System.out.println(String.class); // class java.lang.String
System.out.println(int.class); // int
System.out.println(void.class); // void
✅ 应用:Class
反射
Class<?> clazz = String.class;
System.out.println(clazz.getName()); // java.lang.String
6️⃣ Text Blocks
(Java 13+ 多行字符串)
Java 13+
引入了 Text Blocks
,用 """
代替 "\n"
拼接:
String textBlock = """
Line 1
Line 2
Line 3
""";
System.out.println(textBlock);
要启用文本块的预览功能,需要为编译器添加--enable-preview
选项。
全局编译器设置
- 点击
File
->Settings
(Windows/Linux)或IntelliJ IDEA
->Preferences
(Mac)。 - 在设置窗口中,选择
Build, Execution, Deployment
->Compiler
->Java Compiler
。 - 在
Additional command line parameters
文本框中,添加--enable-preview
。 - 点击
OK
保存设置。
配置运行配置
如果你在运行程序时也需要启用预览功能,需要为运行配置添加--enable-preview
选项。
- 点击 IDEA 右上角的运行配置下拉框,选择
Edit Configurations
。 - 在
VM options
文本框中,添加--enable-preview
。 - 点击
OK
保存设置。
完成以上步骤后,你就可以在 IntelliJ IDEA 中正常使用 Java 文本块功能了。
💡 好处 ✅ 可读性更高(无需 \n
)。
✅ 支持换行、引号:
String json = """
{
"name": "yaoxin",
"age": 25
}
""";
🔹 总结
类型 | 语法 | 示例 |
---|---|---|
字符字面量 |
'A' , '\u0041'
|
'中' , '\n' , '\t'
|
字符串字面量 |
"Hello" , "你好"
|
"C:\\Path" |
Unicode 转义 | \uXXXX |
'\u4F60' → '你'
|
特殊字符 |
\t , \n , \\
|
"Hello\nWorld" |
null 字面量 | null |
String s = null; |
class 字面量 | ClassName.class |
String.class |
Text Blocks | """ |
"""Hello\nWorld""" |
✅ 最佳实践
char
用'单引号'
,String
用"双引号"
- 使用
\uXXXX
处理 Unicode - 使用
Text Blocks
处理多行文本 null
仅用于引用类型,不适用于int
、double
等基元类型- 避免
null
造成NullPointerException
,用Optional
替代
🚀 希望这个讲解能帮你彻底掌握 Java 字符和字符串字面量! 🎯