StringBuffer类
StringBuffer类,线程安全的可变字符序列,初始化容量为16个字符。一个类似于String的字符串缓冲区,但是不能修改。
常用的是append和insert方法,可以重载,以接纳不同类型的参数类型 x.append("y") 等价于 insert(x.length,y)
/*
在实际开发过程中频繁使用字符串拼接会引起资源的浪费
在Java中的字符串是不可变的,每拼接一次就会产生新的字符串
这样会占用大量的方法区内存,造成方法区内存的浪费
String a="hello";
a+="world";
以上两行代码,导致在方法区字符串常量池中,创建了三个常量
“hello”
"world"
"helloworld"
*/
public class StringBufferTest{
public static void main(String [] args){
String s="";
for(int i=0;i<100;i++){
s+=i;
}
/*
这样写会造成大量的方法区常量池内存的浪费,造成很大的压力
*/
}
}
/*
开发过程中如果需要进行大量的字符串拼接,建议使用StringBuffer
java.lang.StringBuffer
java.lang.StringBuilder
*/
public class StringBufferTest{
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个初始化容量为16的 byte[] 数组。(字符串缓冲区对象)
StringBuffer stringBuffer = new StringBuffer();
//拼接字符串统一调用append()方法
stringBuffer.append("a");
stringBuffer.append("b");
stringBuffer.append("a");
//append方法在进行追加时,如果byte数组满了,会自动进行扩容
System.out.println(stringBuffer.toString());//不写也会默认调用toString方法
//aba
//如何优化StringBuffer的性能?
/*在创建StringBuffer时尽可能给一个初始化容量
* 尽量减少底层的扩容次数,预估计一下,给一个大一点的容量
* */
//String 和 StringBuffer底层都是byte[] 数组。区别是String中的byte数组是被final修饰的,一旦定义不会被改变
//StringBuffer 原理是数组容量 地址会指向新的字符串,之前的会被释放
StringBuffer sb = new StringBuffer(12);//给一个合适的初始化容量,能够优化程序,扩容次数越少,效率越高
sb.append("hello");
sb.append("world");
System.out.print(sb);
}
}
方法 | 描述 |
---|---|
append(String str) | 在字符串末尾追加字符串 |
delete(int start,int end) | 删除区间内字符(前闭后开) 后面往前移,在字符串基础上操作 |
deleteCharAt(int index) | 删除索引处字符 |
replaceCharAt(int start,int end,str) | 替换区间处字符 |
substring(int start) | 从起始位置截取到末尾 |
substring(int start,int end) | 从索引strart位置到索引end |
insert(int offset,str) | 从索引处插入字符串 |
indexOf(str) | 第一次出现的位置 |
reverse() | 字符串序列翻转 |
toString | 对象转成字符串 |
insert() |