常用类——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.");
}

浙公网安备 33010602011771号