news 2026/5/7 11:01:29

【大白话说Java面试题】【Java基础篇】第34题:String、StringBuffer和StringBuilder的区别是什么

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【大白话说Java面试题】【Java基础篇】第34题:String、StringBuffer和StringBuilder的区别是什么
第34题:String、StringBuffer和StringBuilder的区别是什么

📚回答:

  • 核心对比
    StringStringBufferStringBuilder是 Java 中处理字符串的三种主要方式,它们在可变性线程安全性性能上有显著差异。以下是详细对比:

1. String
  • 定义

    • String是一个不可变的字符串对象,一旦创建,其内容无法更改。
    • 每次对字符串进行修改(如拼接)时,都会生成一个新的String对象。
  • 底层实现

    • 底层基于字符数组实现,但由于不可变性,每次修改都会创建新的数组。
  • 优点

    • 线程安全:因为内容不可变,多线程环境下无需额外同步。
    • 使用简单:适用于大多数场景,尤其是不需要频繁修改字符串的情况。
  • 缺点

    • 性能较差:频繁修改会导致大量临时对象产生,增加内存开销。

    💡代码示例
    以下代码展示了String的不可变性:

Stringstr="Hello";str+=" World";// 创建了一个新的String对象System.out.println(str);// 输出 "Hello World"

2. StringBuffer
  • 定义

    • StringBuffer是一个可变的字符串对象,支持直接修改内容。
    • 底层基于字符数组实现,默认初始容量为 16 字节。
  • 线程安全性

    • 方法使用synchronized关键字修饰,保证线程安全,适合多线程环境。
  • 扩容机制

    • 当现有容量不足时,会自动扩容为原容量的 2 倍 + 2(即(oldCapacity * 2) + 2)。
  • 优点

    • 线程安全:适合多线程场景下的字符串操作。
  • 缺点

    • 性能较低:由于加锁机制,效率低于StringBuilder

    💡代码示例
    以下代码展示了StringBuffer的用法:

StringBuffersb=newStringBuffer("Hello");sb.append(" World");// 直接修改原有对象System.out.println(sb);// 输出 "Hello World"

3. StringBuilder
  • 定义

    • StringBuilder是一个可变的字符串对象,与StringBuffer类似,但不保证线程安全
  • 性能优势

    • 不使用synchronized关键字,因此在单线程环境下性能优于StringBuffer
  • 适用场景

    • 单线程环境下需要频繁修改字符串的场景。

    💡代码示例
    以下代码展示了StringBuilder的用法:

StringBuildersb=newStringBuilder("Hello");sb.append(" World");// 直接修改原有对象System.out.println(sb);// 输出 "Hello World"

4. 对比总结
特性StringStringBufferStringBuilder
可变性不可变可变可变
线程安全性线程安全线程安全非线程安全
性能较低(频繁修改时)较低(加锁开销)较高(无锁)
适用场景字符串内容固定或较少修改多线程环境下的字符串操作单线程环境下的字符串操作

💡面试官视角

  • 面试官可能会问“为什么String是不可变的?”
    答:不可变性保证了线程安全,避免多线程环境下数据竞争问题。
  • 面试官可能会追问“StringBufferStringBuilder的扩容机制有什么区别?”
    答:两者扩容机制相同,都是(oldCapacity * 2) + 2,但StringBuffer因为加锁,性能略低。

📌专栏:大白话说Java面试题 — 01-Java基础篇

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/7 10:58:03

5分钟搞定PPT自动化!PptxGenJS让你告别手动制作的时代

5分钟搞定PPT自动化!PptxGenJS让你告别手动制作的时代 【免费下载链接】PptxGenJS Build PowerPoint presentations with JavaScript. Works with Node, React, web browsers, and more. 项目地址: https://gitcode.com/gh_mirrors/pp/PptxGenJS 还在为每周重…

作者头像 李华
网站建设 2026/5/7 10:58:02

3步轻松定制你的Emby媒体服务器:从界面美化到功能增强全攻略

3步轻松定制你的Emby媒体服务器:从界面美化到功能增强全攻略 【免费下载链接】Emby.CustomCssJS Easy to manage your Custom JavaScript and Css to modify Emby 项目地址: https://gitcode.com/gh_mirrors/em/Emby.CustomCssJS 你是否厌倦了千篇一律的Emby…

作者头像 李华
网站建设 2026/5/7 10:58:02

哈希集合完全指南:如何在C语言中实现高效的数据存储与查找

哈希集合完全指南:如何在C语言中实现高效的数据存储与查找 【免费下载链接】C Collection of various algorithms in mathematics, machine learning, computer science, physics, etc implemented in C for educational purposes. 项目地址: https://gitcode.com…

作者头像 李华
网站建设 2026/5/7 10:58:00

Modern C++强类型枚举:enum class作用域枚举的终极指南

Modern C强类型枚举:enum class作用域枚举的终极指南 【免费下载链接】modern-cpp-features A cheatsheet of modern C language and library features. 项目地址: https://gitcode.com/gh_mirrors/mo/modern-cpp-features Modern C强类型枚举(en…

作者头像 李华