【Java基础:StringBuferr】String StringBuffer StringBuilder总结

Java使用String StringBuffer StringBuilder总结

最近看了下java,刚刚看到String, StringBuffer, StringBuilder
在这里插入图片描述

1. String

String对象被创建,创建的字符串就不能被修改。
乍一看,好像是一个挺严重的限制。
但是,实际并非如此,还是可以执行字符串操作。区别是,当每次需要已存在的字符串的修改版本时,需要创建包含修改内容的新String对象,原始字符串保持不变。

1.1 String构造函数

// 第一种
String s = new String();

// 第二种
String(char chars[])

// 第三种
String(char chars[], int startIndex, int numChars)

// 第四种
String(String strObj)

1.2 字符串替换示例

public class StringRepalce {
    public static void main(String[] args) {
        String org = "This is a test, This is, too";
        String search = "is";
        String sub = "was";
        String result = "";
        int i;
        // substring 两种重载方法
        do {
            System.out.println(org);
            i = org.indexOf(search);
            if (i != -1) {
                result = org.substring(0, i);  // substring 开始位置截取到结束位置
                result = result + sub;
                result = result + org.substring(i + search.length());  // substring 只填写开始位置, 会去截取开始位置到结尾
                org = result;

            }
        } while (i != -1);
    }
}

输出结果:

This is a test, This is, too
Thwas is a test, This is, too
Thwas was a test, This is, too
Thwas was a test, Thwas is, too
Thwas was a test, Thwas was, too

2. StringBuffer

StringBuffer允许中间插入字符和子串、或者再末尾追加字符和子串。
StringBuffer能够自动增长空间大小, 所以它会预先分配空间,并且允许空间增长。

2.1 StringBuffer构造函数

StringBuffer()  // 默认构造函数预留16个字符的空间,不需要分配。

StringBuffer(int size) // 接收一个显示设置缓冲区大小的整型参数。

StringBuffer(String str) // 接收一个设置StringBuffer 对象初始化内容的String 参数, 并额外分配16个字符空间。

StringBuffer(CharSequence chars) // 创建包含字符序列的对象,并额外预留16个字符的空间,包含的字符序列是由chars指定的。

2.2 StringBuffer字符串可变长度示例

public class StringBufferDemo {
    public static void main(String[] args) {

        StringBuffer sb = new StringBuffer("Hello");
        System.out.println("buffer " + sb);
        System.out.println("length " + sb.length());
        System.out.println("capacity = " + sb.capacity());  // 默认长度是字符串长度 + 16 也就是5+16 = 21
        sb.append(" ").append("Java").append("!");
        System.out.println("buffer " + sb);
        System.out.println("length " + sb.length());
        System.out.println("capacity = " + sb.capacity());  // 没超过21的长度,不会增加
        sb.append(" This is an");
        System.out.println("buffer " + sb);
        System.out.println("length " + sb.length());
        System.out.println("capacity = " + sb.capacity()); // 如果长度超过21 (21+1)*2 = 44
        sb.append("abcdefghijklmnopqrstuvwxyz");
        System.out.println("buffer " + sb);
        System.out.println("length " + sb.length());
        System.out.println("capacity = " + sb.capacity()); // 再超过 (44+1)*2
    }
}

输出结果:

buffer Hello
length 5
capacity = 21
buffer Hello Java!
length 11
capacity = 21
buffer Hello Java! This is an
length 22
capacity = 44
buffer Hello Java! This is anabcdefghijklmnopqrstuvwxyz
length 48
capacity = 90

capacity()反馈的是字符串已分配的容量长度
可以看到每次超出原先分配内存的空间长度都是 (n+1)*2,n表示原先分配的长度

3. StringBuilder

StringBuffer和StringBuilder类似,但是StringBuilder不是同步的,它不是线程安全的
StringBuilder优势:有更高的性能,字符串可以被多个线程修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值