StringBuffer

本文详细介绍了Java中的StringBuffer类,包括其线程安全的特性、构造方法、添加、删除、替换、反转、查找和截取功能,以及与String类的相互转换和作为参数传递时的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

StringBuffer类的概述

我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗费时间,又浪费空间,而StringBuffer类就可以解决这个问题。

StringBuffer时一个线程安全的可变字符序列

StringBuffer类的构造方法

1.构造方法

public StringBuffer():无参构造

public class Mytest {
    public static void main(String[] args) {
        //StringBuffer可变字符序列,长度是可变的
        //String一旦被定义它的值不能被改变
        //StringBuffer可以认为是一个字符容器,你可以不断的往容器中追加内容
        //StringBuffer(),构造一个其中不带字符的字符串缓冲区,初始容量为16个字符
        StringBuffer stringBuffer = new StringBuffer();
        System.out.println(stringBuffer.capacity());//获取容量  16
        stringBuffer.append("abc");
        System.out.println(stringBuffer.capacity());//16
        System.out.println(stringBuffer.length());//获取容器中字符的长度   3
    }
}

public StringBuffer(int capacity):指定容量的字符串缓冲区对象

public StringBuffer(String str):指定字符串内容的字符串缓冲区对象

public class Mytest2 {
    public static void main(String[] args) {
        //StringBuffer(int capacity)
        //构造一个不带字符但具有指定初始容量的字符串缓冲区
        StringBuffer stringBuffer = new StringBuffer(100);
        System.out.println(stringBuffer.capacity());//100
        StringBuffer stringBuffer1 = new StringBuffer("abcde");
    }
}

2.方法

public int capacity():返回当前容量,理论值

public int length():返回长度,字符数,实际值

StringBuffer类的添加功能

public StringBuffer append(String str ):可以把任意类型的数据添加到字符串缓冲区里面,并返回字符串缓冲区本身

public class Mytest3 {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer();
        //往字符串缓冲区中追加内容
        StringBuffer stringBuffer1 = stringBuffer.append("abc");
        System.out.println(stringBuffer == stringBuffer1);//true
        //返回的还是原来的对象,所以可以链式编程
        String s = stringBuffer.append(100).append(true).toString();
       // stringBuffer 重写了toString()方法,返回字符串类型
        System.out.println(s);
    }
}

public StringBuffer insert( int offset ,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身

public class Mytest4 {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer();
        StringBuffer stringBuffer1 = stringBuffer.append("aaa").append("bbb");
        //可以在指定位置追加内容,返回的还是字符串缓冲区本身
        StringBuffer stringBuffer2 = stringBuffer1.insert(0, "0000");
        System.out.println(stringBuffer2);
    }
}

StringBuffer类的删除功能

public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身

public StringBuffer delete(int start ,int end ):删除从指定位置开始指定位置结束的内容,并返回本身

public class Mytest5 {
    public static void main(String[] args) {
        StringBuffer sb1 = new StringBuffer();
        StringBuffer sb2 = sb1.append("看似简单");
        //根据索引一次删除一个字符,返回的还是字符串缓冲区本身   看似单
        System.out.println(sb2.deleteCharAt(2));
        //可以根据起始索引和终止索引,一次删除一段内容 返回的还是字符串缓冲区本身   看单
        System.out.println(sb2.delete(1, 2));
    }
}

StringBuffer的替换的反转功能

public StringBuffer replace( int start,int end,String str):从start开始到end用str替换

public StringBuffer reverse():字符串反转

public class Mytest6 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        StringBuffer sb2 = sb.append("哈哈哈哈哈哈");
        StringBuffer sb3 = sb2.replace(0, 5, "天天向上");
        //根据其实索引和终止索引替换容器中的内容,索引含头不含尾,返回的还是容器本身
        System.out.println(sb3);//天天向上哈
        //反转容器中的内容,返回的还是字符串缓冲区本身
        System.out.println(sb3.reverse());//哈上向天天
    }
}

StringBuffer的查找功能(与String类的查找方法大同小异)

int indexOf(String str):从头查找该字符串,在容器中第一次出现的索引,如果找不到就返回-1

int indexOf(String str,int fromIndex):从指定索引处开始查找该字符串第一次出现的索引,如果找不到就返回-1

int lastIndexOf(String str);int lastIndexOf(String str,int fromIndex);从后往前找

StringBuffer的截取功能及注意事项(与String类的截取方法大同小异)

public String substring(int start):从指定位置截取到末尾

public String substring(int start,int end):截取从指定位置开始到结束位置,包括开始位置,不包括结束位置

注:返回值类型不再是StringBuffer本身

StringBuffer和String的相互转换

String----StringBuffer

1.通过构造方法

2.通过append()方法

StringBuffer----String

1.使用subString方法

2.通过构造方法

3.通过toString()方法

public class Mytest7 {
    public static void main(String[] args) {
        //String ---StringBuffer
        String str="abc";
        StringBuffer s1 = new StringBuffer(str);
        StringBuffer s2 = new StringBuffer();
        StringBuffer s3 = s2.append(str);
        
        //StringBuffer---String
        StringBuffer sb1 = new StringBuffer("abide");
        String s = sb1.toString();
        String s4 = sb1.substring(0);
        String s5 = new String(sb1);
    }
}

StringBuffer和String分别作为参数传递

String作为参数传递,String虽然是引用类型,但是他是一个常量,所以在做传递的时候,完全可以将其看成基本数据类型数据进行传递;StringBuffer作为参数传递

public class Mytest8 {
    public static void main(String[] args) {
        //引用类型作为参数传递,属于引用传递,传递的是地址值,形参的改变会影响实参
        //基本类型作为参数传递,属于值传递,传递的是值,形参的改变不影响实参
        //String类型虽然是引用类型,但他的传递是值传递,因为他的值本身是常量
        String s = "hello";
        test(s);
        System.out.println(s);//hello
        StringBuffer sb = new StringBuffer("abc");
        test(sb);
        System.out.println(sb);//bbbcba
    }

    private static void test(StringBuffer sb) {
        sb.append("bbb").reverse();
    }

    private static void test(String s) {
        s+="world";
        System.out.println(s);//helloword
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值