1、String的值是不变的,因为String的底层是一个final类型的char[]。由String源码前三行得出此条结论。
每次对String的操作都会生成新的String对象,会造成内存浪费而且String的拼接速度慢。
2、StringBuilder:底层是char[],线程不安全,速度变快;
public class Main {
public static void main(String[] args) {
StringBuilder stringBuilder = new StringBuilder();
for(int i=0;i<10000;i++){
stringBuilder.append("hello");
}
}
}
3、StringBuffer:底层是char[],线程安全(加锁),速度比StringBuilder慢;
public class Main {
public static void main(String[] args) {
StringBuffer stringBuffer = new StringBuffer();
for(int i=0;i<10000;i++){
stringBuffer.append("hello");
}
}
}
总结:
1)在字符串比较多的情况下,三者的执行效率:StringBuilder > StringBuffer > String
2)在字符串比较少的情况下,用String
3)单线程操作字符串常量池下操作大量数据用StringBuilder。
4)多线程操作字符串常量池下操作大量数据用StringBuffer。