关于String和StringBuilder

本文探讨了Java中字符串拼接的问题,特别是循环拼接时的性能问题,并介绍了StringBuilder作为解决方案的优势。文章还展示了StringBuilder的基本用法及常见方法,包括其支持的链式调用特性。

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

一、String虽然可以直接拼接字符串,但是,在循环中,每次循环都会创建新的字符串对象,然后扔掉旧的字符串。这样,绝大部分字符串都是临时对象,不但浪费内存,还会影响GC效率。
为了能高效拼接字符串,Java标准库提供了StringBuilder,它是一个可变对象,可以预分配缓冲区,这样,往StringBuilder中新增字符时,不会创建新的临时对象。
StringBuffer是Java早期的一个StringBuilder的线程安全版本,它通过同步来保证多个线程操作StringBuffer也是安全的,但是同步会带来执行速度的下降。

二、StringBuilder的使用
StringBuilder sb = new StringBuilder(1024);
for (int i = 0; i < 1000; i++) {
    sb.append(',');
    sb.append(i);
}
String s = sb.toString();

三、String是引用类型

四、String不可变,对String对象的任何修改都会生成新的对象

五、String在设计之初,虚拟机就对它做了特殊的优化,将字符串保存在虚拟机内部的字符串常量池中。一旦我们要创建一个字符串,虚拟机会先去常量池中检查是否创建过这个字符串,若有则直接引用。

六、StringBuilder常用方法

StringBuilder append(CharSequence s) //追加字符串

StringBuilder append(int b) //追加字符串

StringBuilder insert(int dstOffset, CharSequence s) //插入字符串

StringBuilder insert(int dstOffset, int b) //插入字符串

StringBuilder delete(int start, int end) //删除字符串

StringBuilder replace(int start, int end, String str) //替换字符串

StringBuilder reverse() //字符串反转

七、StringBuilder支持链式操作

如builder.append("a").append("b").append("c");

tips:

// 这里可能引发空指针异常

s1.equals("hello");

// 不会引发空指针异常

"hello".equals(s1);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值