String,StringBuilder,StringBuffer的区别
简单地说,String对象是不可变的字符串常量;StringBuilder是线程不安全的变量;StringBuffer是线程安全的变量;
StringBuilder和StringBuffer相似,所以本文以StringBuffer举例:
StringBuffer的内部实现方式和String不同,StringBuffer在进行字符串处理时,不生成新的对象,在内存使用上要优于String类。所以在实际使用时,如果经常需要对一个字符串进行修改,例如插入、删除等操作,使用StringBuffer要更加适合一些。
String对象创建后不可以被修改,重新赋值其实是两个对象。而StringBuffer类可预先分配指定长度的内存块建立一个字符串缓冲区。这样使用StringBuffer类的append方法追加字符比 String使用 + 操作符添加字符到一个已经存在的字符串后面有效率得多。因为使用 + 操作符需要对字符串重新分配内存。使用StringBuffer类就避免了这个问题。
验证:
结果:
StringBuffer类中的方法要偏重于对字符串的变化例如追加、插入和删除等。
1. append方法
作用:使用该方法进行字符串的连接
StringBuffer sb = new StringBuffer("hello");
sb.append(Wolrd);
则对象sb的值将变成”helloWolrd”。
2. deleteCharAt方法
作用:删除删除指定位置的字符
StringBuffer sb = new StringBuffer(helloWorld);
sb. deleteCharAt(5);
则对象sb的值变为"helloorld"。
3. delete方法
作用:删除指定区间以内的所有字符,包含start,不包含end索引值的区间
StringBuffer sb = new StringBuffer("helloWorld");
sb. delete (1,4);
则对象sb的值是”hoWorld”。
4. insert方法
作用:在指定索引值位置中插入字符串
StringBuffer sb = new StringBuffer("hoWorld");
sb.insert(1,"ell");
则对象sb的值是”helloWorld”。
5. reverse方法
作用:将对象中的内容反转
StringBuffer sb = new StringBuffer("hello");
sb.reverse();
则对象sb的值是”olleh”。
6. setCharAt方法
作用:设置指定索引值位置的字符
StringBuffer sb = new StringBuffer("helloworld");
sb.setCharAt(5,’W’);
则对象sb的值是”helloWold”。
7. trimToSize方法
作用:将对象的中存储空间缩小到和字符串长度一样的长度
8. 构造方法:
StringBuffer s0=new StringBuffer(); 注:默认分配了长16字节的字符缓冲区
StringBuffer s1=new StringBuffer(512);注:分配了512字节的字符缓冲区
9. length方法
作用:获取字符串的长度
StringBuffer s = new StringBuffer("www");
int i=s.length();
则返回的值为3
10. substring方法
作用:指定位置截取字符串
substring(int start) //返回从start下标开始以后的字符串
substring(int start,int end) //返回从start到 end-1字符串
11. replace方法
作用:替换字符串
StringBuffer sb = new StringBuffer("helloworld");
sb.replace(0,1,"H");
则对象sb的值是”Hellowold”。
12.转换为不变字符串:toString()。