String是基本数据类型,但是String有封装类
String a1="aa";(来自栈的常量池)
String a2=new String("aa");(封装类,来自堆的new出的对象)
a1和a2是equal的(值相同),但是不是==的(二者地址不相同)。
常用的String a3=a1+a2+...;
每次+操作都会产生新的临时string,如果拼接操作太多,会产生很多中间量的String,这会消耗内存。
stringBuilder 会产生一块初始长度的内存,用char[]数组来保存新添加的string并自动扩容,不会重复创建新string,多字符拼接推荐使用,尤其单线程,非线程安全,单线程下效率高于stringbuffer.
StringBuffer,原理同stringBuilder,但是加了很多Synchronized关键字来进行线程同步,所以多线程推荐使用,线程同步安全。
字符串比较短的情况下,三者差别不大。字符串多而长,推荐stringbuilder,多线程推荐Stringbuffer.
Stringbuilder的三种情况方式
StringBuilder sb=new StringBuilder();
sb.setLength(0);//推荐,实现最简单,如果设置的长度比当前的小,直接返回设置长度。
sb.delete(0, sb.length()-1);
sb.replace(0, sb.length()-1,"" );