String
不可变的类。类被final修饰

存储数据的数组不可变,因为也被final 修饰

不会初始化容量大小和扩容。value只能被初始化一次。value变量其实就是存储了String字符串中的所有字符。

无论是String的 concat() 方法还是substring() 方法,都是创建了新的String对象。



所以,String对象频繁的进行拼接,截取,替换操作效率很低下
StringBuilder
继承抽象类:AbstractStringBuilder
初始化容量:16
StringBuilder stringBuilder = new StringBuilder();

可以扩容。
stringBuilder.append("fdsfvds");
append过程及扩容机制





StringBuffer
流程和StringBuilder一样,说说不一样的地方:
方法使用了 synchronized 关键字修饰,在多线程下的操作字符串的安全性。
比StringBuilder 多了 toStringCache参数,每次 append 都会将 toStringCache 置位 null
因为在 toString 的时候会判断toStringCache是否为null,在多次调用其toString方法时,其new出来的String对象是会共享同一个char[] 内存的,达到共享的目的。所以主要到StringBuffer做了修改都会将toStringCache设置为null。



本文详细探讨了Java中String类的不可变性及其对性能的影响,指出频繁的String对象拼接和截取会导致效率低下。接着介绍了StringBuilder和StringBuffer的区别,StringBuilder适合单线程环境,而StringBuffer在多线程环境下提供了同步机制以保证安全性。通过分析,我们了解到在需要多次修改字符串时,使用StringBuilder或StringBuffer能显著提高效率。
1529

被折叠的 条评论
为什么被折叠?



