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 字符和字符串字面量! 🎯