常用类——Java.lang.String字符串拼接详细解释!

Java.lang.String字符串拼接详细解释!

字符串拼接

字符串是一个不变类,所以一旦创建无法改变,既无法进行动态的增长和缩短

注意⚠️:以下代码一共会在内存中产生3个不同的字符串对象,即字符串拼接时会产生新的字符串对象,而不是在原有字符串基础上改变的!!!

String str1 ="abc"
String str2 ="def"
String str3 =str1+str2;

一般结论:

字符串通过+来拼接,效率非常低,因为会产生额外对象,消耗内存空间,所以拼接时推荐使用StringBuilder来替代使用

‼️重要结论补充

注意: JDK5.0之后+拼接方式会自动转换成StringBuilder的append()拼接方式来提升拼接效率,但是这种方式在循环中不能起效

+拼接的时候底层会使用StringBuilder,如果是非循环体和使用StringBuilder相差无几,如果是循环体,就会在循环体内每次循环的时候new一个StringBuilder对象,创建很多次对象,造成运行效率下降。
总结:
1、如果不是在循环体中进行字符串拼接的话,直接使用+就好了。
2、如果在并发场景中进行字符串拼接的话,要使用StringBuffer来代替StringBuilder
3、StringUtils.join用于将数组元素用某个字符串拼接起来
4、Java8新增了StringJoiner用于将list拼成字符串

所以上面的结论应该改为:

在循环体中字符串通过+来拼接,效率非常低,因为会产生额外对象,如果在非循环体中,性能相差无几。同时toString方法的重写中也是用+拼接的所以更加证实重要结论。

解决办法:

在循环体中使用java.lang.StringBuildear类更快,他是一个动态字符串类,弹性容器,即拼接时会在自身上增长,不会产生额外对象。

StringBuilder stringBuilder = new StringBuilder("abc");
 //获取当前系统时间的毫秒数,从1970.1.1 0:0:0(CST+8)开始计算的到你程序运行此行代码的毫秒数
        long start = System.currentTimeMillis();
        for (int i = 0; i < 100000000; i++){
          stringBuilder.append("def");
        }
        long end = System.currentTimeMillis();
        System.out.println((end - start) + "ms.");
    }
posted @ 2022-03-23 22:37  JanoCode  阅读(330)  评论(0)    收藏  举报