JavaSE-15-常用对象StringBuffer StringBuilder
StringBuffer StringBuilder
StringBuffer 与String 区别
1.StringBuffer 就是字符串缓冲区,
2.StringBuffer可变长度。String 长度不可变。
3. 可以存储不同类型数据。最终转换成字符串 ,初始容量默认16个字符。
4.可以对字符串 插入insert 追加 append ,修改replace。删除delete,查找indexOf (增删改查)
package stringbuffer;
public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer s= new StringBuffer();//字符串容器
StringBuffer s1= s.append(4);// 指向同一块地址
System.out.println(s==s1);//此时比较的是地址
//存储不同数据类型
//增删改查
//尾部追加
s1.append(“333”);
s1.append(true);
s1.append(1.2222);
s1.append(1.2222).append(true).append(“3333”);//方法调用链
System.out.println(“s:”+s);//s:4333true1.22221.2222true3333
//插入 1 位置
s1.insert(1,“nihao”);
System.out.println(s);//4nihao333true1.22221.2222true3333
//修改
StringBuffer sb2= new StringBuffer();
sb2.append(“abcd”);
sb2.insert(2,“XX”);
System.out.println(sb2);//abXXcd
//删除
StringBuffer sb3= new StringBuffer();
sb3.append(“abcd”);
sb3.delete(0,2);//不包含 2
System.out.println(sb3);//cd
//清空缓冲区
StringBuffer sb4= new StringBuffer();
sb4.append(“abcd”);
sb4.delete(0,sb4.length());//
System.out.println(sb4);//空 没东西
//修改
StringBuffer sb5= new StringBuffer();
sb5.append(“abcd”);
sb5.replace(1,3,“xyz”);//
System.out.println(sb5);//axyzd
//查找
System.out.println(sb5.lastIndexOf(“a”));//axyzd
//指定索引出替换
sb5.setCharAt(1,‘5’);
System.out.println(sb5);//axyzd
//设置长度
StringBuffer sb6= new StringBuffer();
sb6.append(“abcd”);
sb6.setLength(2);
System.out.println(sb6);//ab
sb6.setLength(10);
System.out.println(sb6);//ab
//反转
System.out.println(sb6.reverse());//ba
}
}
可变长度数组
长度超过会 创建一个多一倍的数组,旧数组赋值到新数组。
StringBuffer 构造可以指定长度。与默认16长度 区别在于效率上,比如能够确定数据长度在
40 内。可以指定长度 节省创建动作。用默认的 要延长 还要运算。
StringBulder 可变字符序列与StringBuffer区别
StringBuilder 与StringBuffer 用法一模一样。
在单个线程中使用StringBuilder 比StringBuffer快(为什么快 ? 因为不需要 判断锁),StringBuilder不保证多线程,多线程要用StringBuffer.
- jdk升级特点:
- 1,简化书写。
- 2,提高效率。
- 3,增加安全性。
StringBuffer API 加了 sychronized :
StringBuilder:
StringBuilder 与String 对比
单线程中在循环体 做字符串拼接时候用StringBuilder append 比String 的“+” 好 ,因为String会产生新的对象。
package cn.itcast.p2.stringbuffer.test;
public class StringBuilderTest {
/**
* @param args
*/
public static void main(String[] args) {
int[] arr = {3,1,5,3,8};
String s = arrayToString_2(arr);
System.out.println(s);//"[3,1,5,3,8]"
}
public static String arrayToString_2(int[] arr){
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1)
sb.append(arr[i]+", ");
else
sb.append(arr[i]+"]");
}
return sb.toString();
}
/**
* 将一个int数组变成字符串。
*/
public static String arrayToString(int[] arr){
String str = "[";
for (int i = 0; i < arr.length; i++) {
if(i!=arr.length-1)
str+=arr[i]+", ";//会产生新对象
else
str+=arr[i]+"]";
}
return str;
}
}
}