Java字符串操作进阶:StringBuilder与StringBuffer剖析

文章标题:

Java字符串操作深度解析:StringBuilder与StringBuffer详解

文章内容

文章目录

  • 字符串的不可变性
  • StringBuilder与StringBuffer
    • 函数运用

字符串的不可变性

字符串之所以不可变,是因为其内部采用了private修饰,仅能在类的内部被访问,外部无法直接对其进行修改。例如下面的代码:

public class test {
    public static void main(String[] args) {
        String str = "abc";
        str += "def";
        System.out.println(str);
    }
}

StringBuilder与StringBuffer

基础示例

public class test {
    public static void main1(String[] args) {
        String str = "abc";
        str += "def";
        System.out.println(str);
    }

    public static void main(String[] args) {
        String str = "hello";
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(str);
        stringBuilder.append("abc");
        str = stringBuilder.toString();
        System.out.println(str);
    }
}

性能差异剖析

  1. 速度对比:通常情况下,StringBuilder的执行速度要明显快于String。这是因为String每次进行拼接操作时都会创建新的String对象,而使用StringBuilder进行append操作后再转为String,避免了频繁的对象创建与销毁,减少了性能消耗。
  2. 对象生成情况:每次String进行拼接都会产生新的对象,而StringBuilder和StringBuffer在拼接过程中不会生成新的对象,直接在原对象基础上进行操作。

性能测试代码示例

public class Test {
    public static void main(String[] args) {
        // 记录String操作的起始时间
        long start = System.currentTimeMillis();
        String s = "";
        for (int i = 0; i < 10000; i++) {
            s += i;
        }
        // 记录String操作的结束时间并计算耗时
        long end = System.currentTimeMillis();
        System.out.println("String的时间:" + (end - start));

        // 记录StringBuilder操作的起始时间
        long start1 = System.currentTimeMillis();
        StringBuilder stringBuilder = new StringBuilder("");
        for (int i = 0; i < 10000; i++) {
            stringBuilder.append(i); // 执行拼接操作
        }
        // 记录StringBuilder操作的结束时间并计算耗时
        long end1 = System.currentTimeMillis();
        System.out.println("StringBuilder的时间:" + (end1 - start1));

        // 记录StringBuffer操作的起始时间
        long start2 = System.currentTimeMillis();
        StringBuffer stringBuffer = new StringBuffer("");
        for (int i = 0; i < 10000; i++) {
            stringBuffer.append(i);
        }
        // 记录StringBuffer操作的结束时间并计算耗时
        long end2 = System.currentTimeMillis();
        System.out.println("StringBuffer的时间:" + (end2 - start2));
    }
}

线程安全性区别

  1. StringBuffer的线程安全性:StringBuffer是线程安全的,其所有方法都使用synchronized修饰,这意味着同一时间只能有一个线程执行其方法,通过锁机制保证线程安全,但锁的获取与释放会带来一定的性能开销,所以StringBuffer比StringBuilder慢。
  2. 线程安全的含义:线程安全指的是同一时间仅有一个线程能够执行相关操作,执行完成后会释放锁。但锁的获取与释放过程会消耗时间,因此StringBuffer在性能上不如StringBuilder。

函数使用

特殊方法

  1. reverse方法:可对字符串进行逆置操作。例如:
public static void main(String[] args) {
    StringBuilder stringBuilder = new StringBuilder("hello");
    stringBuilder.reverse();
    System.out.println(stringBuilder);
}

三者区别总结

  • String的内容不可修改,每次拼接都会生成新的对象。
  • StringBuilder和StringBuffer的内容可以修改,直接在原对象上进行操作。
  • StringBuilder未采用同步处理,是线程不安全的;StringBuffer采用了同步处理,是线程安全的。它们的函数有相似之处。

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/12721.html

(0)
LomuLomu
上一篇 2025 年 7 月 3 日
下一篇 2025 年 7 月 3 日

相关推荐

  • 2025年最新DataGrip激活码永久破解教程 – 支持JetBrains全家桶2099年有效期

    前言 本教程适用于JetBrains旗下所有数据库开发工具,特别是DataGrip,同时也支持PyCharm、IDEA等其他开发环境。以下是成功破解DataGrip至2099年的效果展示: 本教程将详细讲解如何通过几个简单步骤实现DataGrip永久激活,该方法适用于各个版本,并兼容所有主流操作系统: Windows用户 MacOS用户 Linux用户 实测…

    DataGrip激活码 2025 年 8 月 12 日
    7500
  • 2025年最新DataGrip激活码免费获取 | 永久破解DataGrip终极教程(支持2099年)

    本教程适用于JetBrains全系列开发工具,包含DataGrip、PyCharm、IDEA、Goland等所有产品! 首先展示最新DataGrip版本成功激活的截图,可以看到已经完美破解至2099年,彻底解决激活过期问题! 下面将通过详细的图文步骤,教你如何永久激活DataGrip到2099年。 此方法不仅支持最新版本,也兼容所有历史版本的DataGrip…

    DataGrip激活码 2025 年 8 月 11 日
    8900
  • 🚀 2025年最新IDEA激活码 & 永久破解教程(支持JetBrains全家桶)

    💻 适用软件 本教程适用于IntelliJ IDEA、PyCharm、DataGrip、GoLand等JetBrains全家桶所有产品!✨ 先给大家看看最新版IDEA成功破解到2099年的截图,有效期直接拉满,简直不要太爽!😎 下面我将用详细的图文教程,手把手教你如何将IDEA激活到2099年。这个方法同样适用于旧版本哦!👍 无论你用的是Windows、Ma…

    2025 年 5 月 14 日
    32300
  • Coze实战:数据库助力视频混剪流程搭建全攻略

    文章标题: Coze实战:依托数据库构建视频混剪流程全攻略 文章内容: 作者:后端小肥肠 🍊 有疑问可通过私信或者评论区跟我联系。 🥑 创作不易,未经允许不准转载。 相关文章: Coze一键生成打字机效果书单视频(超详细工作流剖析)-CSDN博客 Coze实战:《如果书籍会说话》全方位教程!全流程拆解(含源码)-CSDN博客 10w+爆款文章一键生成:Coz…

    2025 年 7 月 5 日
    14000
  • Java中的Map(如果想知道Java中有关Map的知识点,那么只看这一篇就足够了!)

    前言:在Java编程领域,集合框架(Collection Framework)扮演着至关重要的角色,它提供了丰富的接口和类,用于管理和操作数据集合。在这些接口和类中,Map和Set因其独特的功能而备受青睐,Map用于存储键值对,而Set则用于存储不允许重复的元素集合。 ✨✨✨ 这里是秋刀鱼不做梦的BLOG 目录 1.Map概念简介 (1)Map的定义 (2)…

    2024 年 12 月 27 日
    38200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信