StringBuffer
是提供一个可变字符串的类
//做了十五次new的过程,String类提供的都是值不能修改的字符串
/*String a="1";
for (int i = 0; i < 15; i++) {
a+=i;
System.out.println(a.hashCode());
}*/
//StringBuffer提供的是一个可变字符串的对象
StringBuffer sb=new StringBuffer("0");
for (int i = 0; i < 15; i++) {
sb.append(i);
System.out.println(sb.hashCode());
}
StringBuffer类是String的增强类, 比如: 插入 、追加、替换功能更加强大, 比字符串更加节省内存。
字符串缓冲区:使用缓冲区操作字符串要比直接操作字符串效率高
StringBuffer中的常用构造方法:
常用的成员方法
1.增加
package com.qf;
public class Demo1 {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer("123");
System.out.println(sb1);
StringBuffer sb2 =sb1.append("hello");
System.out.println(sb1);//123hello
System.out.println(sb2);//123hello
System.out.println(sb1==sb2);//ture
}
//方法链(了解)
sb1.append("java").append("java").append("java").append("java");
System.out.println(sb1);
System.out.println(sb2);
//插入
sb1.insert(2,"hhhhhhhh");
System.out.println(sb1);
}
删除
/*
StringBuffer delete(int start, int end)
StringBuffer deleteCharAt(int index)
*/
//删除指定区间的字符串(包含start 不包含end)
sb1.delete(2,3);
System.out.println(sb1);
//删除指定位置上的字符
sb1.deleteCharAt(0);
System.out.println(sb1);
修改
/*
StringBuffer replace(int start, int end, String str)
void setCharAt(int index, char ch)
*/
//替换指定区间的字符串
sb1.replace(2,5,"nnnnnn");
System.out.println(sb1);
//替换指定位置上的字符
sb1.setCharAt(0,'x');
System.out.println(sb1);
获取
//和String类中的用法相同
/*
indexOf
lastIndexOf
charAt
length
substring
*/
反转
// StringBuffer reverse()
StringBuffer sb3 = new StringBuffer("my name is zhansan");
sb3.reverse();
System.out.println(sb3);
StringBuilder类
StringBuilder类也是字符串缓冲区,类中的方法与StringBuffer类中的方法使用方法一样,区别在于StringBuilder类中的方法都是线程不安全的,而StringBuffer类中的方法都是线程安全的
String,StringBuffer,StringBuild三者之间的区别(面试题常问)
String类提供的是一个字符串不可更改的对象
StringBuffer和StringBuild都用到了缓冲区,而且都提供了字符串可更改的对象
StringBuffer是线程安全的,StringBuild是线程不安全的(因为StringBuffer里面的方法都加了synchronized)
注意:
1.javaBean中字符串类型的变量还是使用String
2.对于一些经常发生修改的变量,尽量设成StringBuffer