package zuoye2;
import java.util.Arrays;
/**
* StringBuilder和StringBuffer可变字符序列的常用方法
* @author 110
*
*/
public class study04 {
public static void main(String[] args) {
//StringBuilder线程不安全,效率高(一般使用这个,不涉及到安全)StringBuffer线程安全,效率低。
StringBuilder sb = new StringBuilder("abcd");//可变字符序列
StringBuffer sb2= new StringBuffer();
System.out.println(Integer.toHexString(sb.hashCode()));//输出sb对象的地址。
System.out.println(sb);
sb.setCharAt(2, 'M');
System.out.println(Integer.toHexString(sb.hashCode()));//输出sb对象的地址。
System.out.println(sb);//发现输出的地址是一样的,说明对象并没有改变,是同一个对象
//但是输出sb的内容变了,这就意味着StringBuilder是一个可变字符序列,而String是不可变字符序列.
for(int i=0;i<26;i++) {
sb.append((char)('a'+i));//append在sb原有字符串后面加东西
}
System.out.println(sb);
sb.reverse();//将sb字符串倒叙。
System.out.println(sb);
sb.setCharAt(3, '高');
System.out.println(sb);
sb.insert(0, '我');//该方法调用return this,吧自己返回了,可以继续插入,链式调用
sb.insert(1, '你').insert(2, '它').insert(5, "你");//链式调用
System.out.println(sb);
sb.delete(20, 23);//删除某个区间,也可以链式调用。
System.out.println(sb);
//测试可变字符序列和不可变字符序列使用的陷阱
String str8="";
for(int i=0;i<5000;i++) {
str8=str8+i;//因为要和str8连接,所以会生成一个字符串,之后连接后再生成一个字符串,这个循环会产生10000个字符串
//以后如果写服务器端程序,会不停收到用户端访问,对象太多,会造成系统崩溃,所以一般使用下面的
}
StringBuilder sb8 = new StringBuilder("");
for(int i = 0;i<5000;i++) {
sb8.append(i);//这个是直接往后面加,不用创建新对象,所以程序效率高
}
}
}