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

相信很多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倍之差哦!!

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

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

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

你可能感兴趣的:(数据结构与算法,Java/SpringBoot)