不要再使用String字符串拼接了,这样优化性能提升十几倍

本文探讨了Java中字符串拼接的性能问题,特别是在循环中使用String拼接与使用StringBuilder的区别。通过实例对比,展示了StringBuilder在大量字符串拼接操作中的性能优势。

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

相信很多Java开发的小伙伴对String字符串拼接都不陌生,或多或少都使用过,因为方便使用。但殊不知频繁使用字符串拼接会严重降低性能。今天我们看一看如何让String拼接提升十几倍的性能。

那么应该从编译讲起,Java 从 JDK5 开始,便在编译期间进行了优化。如果是无变量的字符串拼接,那么在编译期间值都确定了, javac 工具会直接把它编译成一个字符常量。如果有变量的字符串拼接,在编译期间变量的值是无法确定,所以在运行期间会生成一个StringBuilder 对象。从这里可以看出两者的区别在于有没有生成StringBuilder对象,如果频繁使用有变量的字符串拼接,那么也就会生成很多StringBuilder对象,必然对性能就会造成影响。

我们使用循环内的字符串拼接举个例子

// 循环中使用字符串拼接
String a = "0";
Long start = System.currentTimeMillis();
for (int i = 1; i < 10000; i++) {
    a = a + i;
}
System.out.println("字符串拼接执行一万次时间:" + (System.currentTimeMillis() - start) + " 毫秒");


// 循环外定义StringBuilder
start = System.currentTimeMillis();
StringBuilder b = new StringBuilder();
for (int i = 1; i < 5000000; i++) {
    b.append(i);
}
System.out.println("使用StringBuilder执行五百万次时间:" + (System.currentTimeMillis() - start) + " 毫秒");

大家可以想象一下,如代码所示,在循环中使用字符串拼接的话,只循环一万次的执行时间,和在循环外定义StringBuilder,在循环中使用append,循环五百万次的执行时间,哪个更优呢?哈哈哈 循环次数可是 500倍之差哦!!

 可以见得!! 一万次的执行时间比五百万次的执行时间还长 130毫秒!!! 

原因在于 使用字符串拼接,每循环一次就会产生一个新的 StringBuilder 对象,对资源有一定的损耗。这里循环一万次也就是会产生一万个 StringBuilder 对象。。而循环外使用 StringBuilder,循环内再执行 append() 方法拼接字符串,不管循环几次都只会产生一个 StringBuilder 对象。可怕可怕?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值