Java 基础篇之 String、Stringbuffer、StringBuilder之间的区别

本文详细对比了Java中String、StringBuffer与StringBuilder三个类在性能上的差异。解释了String作为不可变对象,在修改时如何通过创建新对象的方式工作;StringBuffer作为线程安全的可变字符串对象,如何在原有基础上修改;而StringBuilder则提供了更快但非线程安全的字符串构建方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 Java 语言中,对于字符串操作中,String、Stringbuffer、StringBuilder 占据了必不可少的地位。那它们之间具体有什么区别呢?(对于一些入门程序猿来说,字符串处理似乎只用到了 String)。

首先我们从性能上来对比这三个类。再大量改变字符串时 StringBuilder > Stringbuffer > String。为什么会出现这样的性能差呢,我们可以通过它们的本质来理解这样的性能差异。

String类是字符串常量。何为常量?就是一旦初始化后就是不可改变的对象。举个例子:

 //初始化 test 字符串
        String test="This is";
        //在 test 字符串后添加字符串再赋值给 test 对象
        test=test+"a test";

在这个例子中,第一句代码 JVM 会创建一个 test 对象并赋值,而第二行代码中, JVM 会创建一个新的 test 对象,并将原有字符串加上增加部分的字符创赋值给新的 test 对象。这会给人一种错觉,明明我操作的是同一个对象 test 为什么会创建出一个新的对象。其实这就是因为 String 对象是字符常量,不可变对象。所以在对它进行改变时 JVM 执行 new String()方法来重新创建一个内存地址来保存新的字符串。

StringBuffer类是字符串变量(线程安全)。它是一个可以改变的对象,使用它在对字符串进行操作时,JVM 不会创建一个新的内存地址(字符串缓存区)来指向改变后的字符串,而是在原有的字符串缓存区对字符串的长度及内容进行改变。这样的操作显而易见比 String 的创建新的对象要高效许多。

StringBuilder类基本功能与StringBuffer  一致,使用方法也没什么区别。它们的区别是 StringBuilder 是线程非安全的。当我

的字符串缓存区被对个线程使用时它不能保证操作的正确性。但是在单线程使用时它的速度无疑是最快的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值