Java 重要知识点精讲:String 类与不可变特性

布伽蒽 2026-04-29 20:56:28


在 Java 开发中,String 类是使用最频繁的类之一,字符串操作几乎贯穿所有业务逻辑。String 看似简单,但其底层设计、不可变性、字符串常量池等知识点,是面试与高质量编码的必考核心内容。

一、String 是什么

String 是 Java 用于表示字符串的类,位于 java.lang 包下,程序启动即可直接使用。
字符串本质是不可变的字符数组,任何对字符串内容的修改都会产生新对象,而非修改原值。

二、String 最核心特性:不可变性

Java 中的字符串是不可变对象,一旦创建就不能被修改。

为什么不可变?

源码层面决定:
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    private final char value[];
}
1. String 类被 final 修饰,不能被继承

2. 底层存储数据的 char[] 被 final 修饰

3. 所有修改方法(substring、replace、toUpperCase)都返回新字符串

不可变的好处

• 线程安全,多线程无需同步

• 哈希值固定,适合作为 HashMap 键

• 字符串常量池可复用,节省内存

• 安全可靠,防止被意外篡改

三、字符串创建方式与内存区别

1. 字面量方式(推荐)
String s1 = "hello";
直接在字符串常量池中创建或复用对象,效率高、省内存。

2. new 方式
String s2 = new String("hello");
会在堆中创建新对象,再指向常量池中的“hello”,
执行一次 new 至少创建一个或两个对象,不推荐频繁使用。

四、字符串比较必须用 equals()

• ==:比较对象的内存地址

• equals():比较字符串内容

正确写法:
if (str.equals("abc")) { ... }
更安全写法(避免空指针):
if ("abc".equals(str)) { ... }
五、字符串常量池(String Pool)

字符串常量池是 JVM 专门为字符串开辟的一块内存区域,目的是共享复用字符串,减少重复创建。

• 字面量字符串自动进入常量池

• 相同内容的字符串在池中只存一份

• intern() 方法可手动将字符串入池

大量重复字符串场景下,常量池能明显节省内存、提升性能。

六、String、StringBuilder、StringBuffer 区别

这是面试必考知识点:

1. String

◦ 不可变

◦ 每次修改产生新对象

◦ 适合少量字符串操作

2. StringBuilder

◦ 可变

◦ 线程不安全

◦ 效率最高

◦ 适合单线程大量拼接

3. StringBuffer

◦ 可变

◦ 线程安全(方法带 synchronized)

◦ 效率较低

◦ 适合多线程拼接场景

循环拼接字符串严禁使用 String + ,必须用 StringBuilder。

七、常用方法(高频使用)
str.length()           // 长度
str.charAt(i)          // 获取第i个字符
str.equals(s)          // 比较内容
str.contains("xx")     // 是否包含子串
str.substring(2,5)     // 截取
str.split(",")         // 分割
str.trim()             // 去两端空格
str.toUpperCase()      // 转大写
str.indexOf("a")       // 查找下标
八、实际开发注意事项

• 不要在循环中使用 + 拼接字符串,会产生大量垃圾对象

• 优先使用字面量创建字符串,少用 new String(...)

• 比较内容永远用 equals

• 空安全优先使用 "xxx".equals(str)

• 大量拼接优先选择 StringBuilder

九、总结

String 是 Java 最基础也最重要的类,其不可变性和常量池机制是理解字符串性能与安全的关键。
熟练掌握 String 的创建、比较、拼接方式,能有效避免内存浪费、空指针与线程安全问题,是写出稳定、高效 Java 代码的必备基础。

...全文
26 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

151

社区成员

发帖
与我相关
我的任务
社区描述
这里专为新疆政法学院的探索者而建,英雄不问出处。起跑线是起点,热忱与坚持为加速器,无论bug缠身的项目,还是攻克的算法顿悟,每滴汗水皆被珍藏。执炬前行,终将照亮彼此峰顶,我们携手同行。
课程设计笔记经验分享 高校 新疆·图木舒克市
社区管理员
  • 雲中203
  • SHAO060706
  • 三叶草.
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

英雄不问出处

试试用AI创作助手写篇文章吧