Java 字符串字面量

24 Aug 2025 | 3 分钟阅读

在 Java 中,String 字面量 是用双引号 (" ") 括起来的一系列字符。这是一种在代码中直接表示 String 对象的方式。字符串常量池 是专门存放 String 字面量的地方。String 字面量是不可变的。

示例

在这里,"Hello" 是一个 String 字面量。Java 会自动为其创建一个 String 对象。

String 字面量的特性

存储在字符串常量池中: Java 维护一个唯一的字符串字面量池以优化内存。如果两个字面量相同,它们将指向同一个对象。

不可变性: 像所有对象一样,字面量是不可变的。一旦创建,就不能更改其内容。

字符串驻留(Interning): 我们可以通过以下方式强制将字符串添加到池中。

示例:String 字面量的使用

示例

编译并运行

输出

str1: Hello
str2: Java
str3: 123
str4: Hello, world!
str5: Special characters: @#$%^&*()
str6: Escaped characters: nt

String 字面量 vs. new String()

在上面的代码片段中,Hello 是来自字符串常量池的字面量,而new Sting("Hello")在堆上创建了一个新对象。

Null vs. 空字符串字面量

String 字面量选择题

Q1. 下列哪个是 Java 中有效的 String 字面量?

  1. 'Hello'
  2. "Hello"
  3. new String ("Hello")
  4. String ("Hello")
 

答案: b)

解释: Java 中的 String 字面量用双引号表示。选项 A 是字符字面量。选项 C 是 String 对象,不是字面量。选项 D 是无效的语法。


Q2. String 字面量在 Java 中存储在哪里?

  1. Stack
  2. 常量池(字符串常量池)
  3. 静态内存
 

答案:c)

解释: Java 将所有字符串字面量存储在一个称为字符串常量池的公共内存区域,以进行内存优化。


Q3. 关于 Java 中的 String 字面量,以下哪个陈述是正确的?

  1. 它们总是会被垃圾回收
  2. 它们存储在堆内存中
  3. 它们是不可变的,并存储在字符串常量池中
  4. 它们可以使用连接进行修改
 

答案:c

解释: String 字面量是不可变的,并存储在字符串常量池中。创建后无法修改。


Q4. 如果在 Java 中声明了两个相同的字符串字面量,会发生什么?

  1. 它们占用两个不同的内存位置
  2. 堆中只创建一个对象
  3. 两者都指向字符串常量池中的同一个对象
  4. JVM 会抛出 DuplicateLiteralException
 

答案:c)

解释: JVM 会重用字符串常量池中已有的字符串字面量以提高内存效率。


Q5. 以下代码的输出是什么?

  1. true
  2. False
  3. 编译错误
  4. 运行时错误
 

答案: b)

解释: s1 是使用 new 关键字创建的,因此它指向堆中的一个不同对象,即使内容相同。