Java基础-----StringBuffer和StringBuilder

文章目录

  • 1.StringBuffer
    • 1.1 构造方法
    • 1.2 常用方法
  • 2.StringBuilder
  • 3.String、StringBuffer、StringBuilder的区别

1.StringBuffer

  • 内容可变的字符串类,适应StringBuffer来对字符串的内容进行动态操作,不会产生额外的对象。
  • StringBuffer在初始时,默认是有16个字符来作为缓冲区
public StringBuffer(int capacity) {
        super(capacity);
    }
public StringBuffer() {
        super(16);
    }

1.1 构造方法

  • new StringBuffer();
  • new StringBuffer(String);
  • new StringBuffer(int);
  • new StringBuffer(charSequence);
public class TestStringBuffer {
    public static void main(String[] args) {
        StringBuffer stringBuffer=new StringBuffer("abc");
        //append():在当前StringBUffer对象上,追加其他内容
        stringBuffer.append("ccc");
        /**
         * 与String不一样
         * StringBuffer中的所有操作都是在原有的StringBuffer上做的修改
         */
        System.out.println(stringBuffer);//abcccc
        //StringBuffer对象可以无限追加操作
        stringBuffer.append("XXX").append(12);
        System.out.println(stringBuffer);//abccccXXX12
        //将StringBuffer对象转为String类型
        String x=stringBuffer.toString();//这里拿到的是String对象
        System.out.println(x);//abccccXXX12
    }
}

比较String和StringBuffer的效率

public class TestStringBuffer {
    public static void main(String[] args) {        
        //10万个字符串累加效果    对比String和StringBUffer的效率
        
        //String
        long t1= System.currentTimeMillis();
        String str=new String("abc");   
        for (int i = 0; i < 100000; i++) {
            str+="abc";
        }
        long t2=System.currentTimeMillis();
        long t=t2-t1;
        System.out.println(t);//2687   2539   2542

        //StringBuffer
        long t1= System.currentTimeMillis();
        StringBuffer buffer =new StringBuffer("abc");        
        for (int i = 0; i < 100000; i++) {
            buffer.append("xxx");
        }
        long t2=System.currentTimeMillis();
        long t=t2-t1;
        System.out.println(t);//4
    }
}

1.2 常用方法

append() 在当前StringBUffer对象上,追加其他内容
capacity() 返回当前StringBuffer的容量
length() 返回长度
setCharAt(int,char) 将给定索引位置的字符设置为第二个参数给定的值
reverse() 将StringBuffer内容反转
delete(int,int) 删除在StringBuffer中从指定索引开始(包含)到结束(不包含)的字符串
toString() 将StringBuffer转成字符串
insert(int,Object) 在指定索引位置,插入给定值
replace(int,int,String) 将指定的字符串替换到起始(包含)位置和结束(不包含)位置中
deleteCharAt(int) 删除指定索引位置的字符
public class TestStringBuffer_1 {
    public static void main(String[] args) {
       StringBuffer buffer=new StringBuffer();
        System.out.println(buffer.capacity());//16

        StringBuffer buffer=new StringBuffer("abc");
        System.out.println(buffer.capacity());//19
    }
}

上述程序结果不同的原因:
Java基础-----StringBuffer和StringBuilder_第1张图片

案例:判断从键盘接收一行文字,是否是回文 例如:abcba

Scanner scanner=new Scanner(System.in);
System.out.println("请输入一行文字:");
String str=scanner.next();
StringBuffer buffer=new StringBuffer(str);
buffer.reverse();
//boolean b=str.equals(buffer);//false  因为在调用String的equals方法时,要求必须是String类型才可以,str是String类型,而buffer是StringBuffer类型。

//解决办法一:把StringBuffer调用toString方法转成String类型
boolean b=str.equals(buffer.toString());

//解决办法二:调用contentEquals方法
boolean b=str.contentEquals(buffer);
System.out.println(b);
StringBuffer buffer=new StringBuffer("abcdef");
//delete(int,int):删除在StringBuffer中从指定索引开始(包含)到结束(不包含)的字符串
buffer.delete(0,3);
System.out.println(buffer);//def
//insert(int,Object):在指定索引位置,插入给定值
buffer.insert(0,"XXX");
System.out.println(buffer);//XXXdef
StringBuffer buffer=new StringBuffer("13566667777");
//replace(int,int,String):将指定的字符串替换到起始(包含)位置和结束(不包含)位置中
buffer.replace(3,7,"****");
System.out.println(buffer);//135****7777
//deleteCharAt(int):删除指定索引位置的字符
buffer.deleteCharAt(0);
System.out.println(buffer);//35****7777

2.StringBuilder

  • 提供了和StringBuffer相同的API

  • StringBuffer的方法,都有synchronized修饰,是线程安全的

  • StringBuild的方法,没有synchronized修饰,非线程安全的。如果是单线程操作字符串相关处理,StringBuilder的效率最高。

3.String、StringBuffer、StringBuilder的区别

  • String和StringBuffer的区别: 一个是常量,一个是变量。String是一个final修饰的终结类,不能产生子类,是使用final的byte数组来存储值,所以一旦创建不能改变。如果疆场对字符串进行修改、删除或者插入操作,建议使用StringBuffer效率更高

  • StringBuffer和StringBuilder的区别: 一个是有线程安全的,一个是非线程安全的

你可能感兴趣的:(#,Java基础,java,开发语言)