12. Java 详解字符和字符串字面量

177 阅读3分钟

12. Java 详解字符和字符串字面量

在 Java 中,字符(char)和字符串(String 都可以使用 Unicode(UTF-16)字符。此外,Java 还支持特殊转义序列(Escape Sequences),可以在代码中表示特殊字符。


1️⃣ charString 字面量

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

charString 不能直接互换

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 转义可以用于任何地方,不仅限于 charString
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选项。

全局编译器设置
  1. 点击File -> Settings(Windows/Linux)或IntelliJ IDEA -> Preferences(Mac)。
  2. 在设置窗口中,选择Build, Execution, Deployment -> Compiler -> Java Compiler
  3. Additional command line parameters文本框中,添加--enable-preview
  4. 点击OK保存设置。

配置运行配置

如果你在运行程序时也需要启用预览功能,需要为运行配置添加--enable-preview选项。

  1. 点击 IDEA 右上角的运行配置下拉框,选择Edit Configurations
  2. VM options文本框中,添加--enable-preview
  3. 点击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 字面量nullString s = null;
class 字面量ClassName.classString.class
Text Blocks""""""Hello\nWorld"""

最佳实践

  • char'单引号'String"双引号"
  • 使用 \uXXXX 处理 Unicode
  • 使用 Text Blocks 处理多行文本
  • null 仅用于引用类型,不适用于 intdouble 等基元类型
  • 避免 null 造成 NullPointerException,用 Optional 替代

🚀 希望这个讲解能帮你彻底掌握 Java 字符和字符串字面量! 🎯