- String是不可变字符数组
- StringBuffer是线程安全的字符数组
- StringBuilder是线程不安全的字符数组
字符数组变化性能对比: StringBuilder > StringBuffer > String
原因是因为String每次改变都要生成一个新的字符串,所以性能最差。StringBuffer虽然不是生成一个新的字符串,但变化的时候要加锁保证线程安全,所以性能较差,StringBuilder是线程不安全的,所以三者中性能最好。
那开发中为什么用性能最差的String频率最多,每次修改都创建一个新的String对象岂不是会产生大量的String对象?
JAVA中有一个字符串池,会把创建过的字符串都放到池中,每次创建字符串时,先从字符串池中取字面量相同的字符串,如果池中没有,就创建一个放到池中并赋值给自己。所以,字面量相同的字符串的引用地址肯定是相同的。而且,字符串的不可变性(final)能保证其线程安全。










网友评论