package cn.bjsxt.stringbuilder;
/**
* String 不可变字符序列
* StringBuilder StringBuffer都是是可变字符序列
* 区别在于StringBuilder(线程不安全,效率高) StringBuffer是(线程安全,效率低)
* @author Administrator
*
*/
public class Test01 { public static void main(String[] args) {
StringBuilder sb = new StringBuilder();//字符数组长度默认16,因为父类构造方法设置的是16
StringBuilder sb1 = new StringBuilder();//字符数组长度默认32
StringBuilder sb2 = new StringBuilder("abcd");//字符长度="abcd"+字符数组长度默认16=20个字符
// 因为父类里面方法重写是16+字符串长度
sb2.append("efg");//在字符创后边添加字符串
sb2.append(true);//还可以添加布尔值
System.out.println(sb2); sb2.append(false).append().append(1.0);//因为 这个方法 return this 所以可以一直调用
System.out.println(sb2); System.out.println("######################"); StringBuilder gh = new StringBuilder("a");//长度"a"+16=17的字符 为什么下面循环20次却可以呢?建新数组替换老数组扩容
//扩容大小(17+1)*2 老数组 没人引用 会被 垃圾回收
//循环里面调用append() 循环添加字符 //看append()源码发现
for(int i=;i<;i++){
gh.append(i);
}
System.out.println(gh);
}
package cn.bjsxt.stringbuilder;
/**
* StringBuilder 线程不安全 效率快
* StringBuffer 唯一的区别 就是 线程安全 效率慢
* 因为加了 synchronized同步的 锁 每次都要等待
* @author Administrator
*
*/
public class Test02 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("abcdefghigklmnopqrstuvwxyz");
//删除 3 4 不包含5
sb.delete(, );//[3,5)
System.out.println(sb);//abcfghigklmnopqrstuvwxyz
//翻转
sb.reverse();
System.out.println(sb);//zyxwvutsrqponmlkgihgfcba StringBuffer sb2 = new StringBuffer();
}
}