String 字符串不可变带来的好处是什么?

发布时间:2026/9/10 3:10:46
String 字符串不可变带来的好处是什么? 目录一. 线程安全(数据安全)二. 节约内存三. 提高集合的存取效率一. 线程安全(数据安全)众所周知String 字符串是默认被 final 修饰的是不可变的那么首先能想到的一个优点就是线程安全String 是存放在堆中的是所有线程所共享的变量不可变这一特性就可以在多线程的情况下防止出现一个线程对 String 做修改导致另一个线程运行结果出现错误。举个最简单的例子A线程和B线程都用到了字符串 s假如说A线程把 s 做了修改那么B线程就会因为A做的修改而被迫受到影响这一点是非常不好的。二. 节约内存String 虽然是不可变的但它却可以重复利用。String 虽然是在堆中但其实分为两种情况如果我们使用 String string xxx 的方式来创建字符串那么被创建出来的字符串对象是存放在堆中的字符串常量池中的可以重复利用假如我们使用 String string new String(xxx) 的方式来创建字符串那么被创建出来的对象是直接存放在堆中的无法重复利用。我用一段代码举例同学们一下子就懂了。public static void main(String[] args) { String str1 abcdefg; String str2 abcdefg; String str3 new String(abcdefg); System.out.println(str1 str2); System.out.println(str1 str3); System.out.println(str2 str3); }运行上述代码得到如下结果可以看到str1 和 str2 都是直接赋值其实指向的是堆中的同一个字符串对象运算结果为 true而 str3 则是使用 new 对象的方式赋值并不会引用常量池中已有的 abcdefg 而是会重新在堆中新建一个再指向新的所以后两次运算都为 false所以说String 虽然不可变却可以重复利用在开发过程中几乎都是使用 String str xxx 创建字符串然后创建的字符串会被缓存到堆中的字符串常量池中在同一各项目中不管有多少个人创建字符串只要字符串内容一样其实最后都是用的常量池中的同一个字符串对象大大的降低了内存的消耗。三. 提高集合的存取效率上面说到了字符串常量池同学们也可以理解为缓存池在缓存池中不仅缓存了字符串的内容还缓存了每一个字符串对应的哈希值hashCode。当我们使用 Map 集合存取数据的时候因为 Map 集合的 Key 基本都是 String 类型所以在存和取数据的时候就不需要重复哈希值直接去缓存池中找就可以找不到才会去计算。这样一来就极大地提高了 Map 集合存取数据的效率。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询