Java-StringBuffer类

基本介绍

java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删;

很多方法与String相同,但是StringBuffer是可变长度的;

StringBuffer是一个容器。

1)StringBuffer是一个final类,无法被继承;

2)实现了Serializable接口,即StringBuffer的对象可以串行化,可以保存到文件或者网络传输;

3)继承了抽象类AbstractStringBuilder

4)AbstractStringBuilder属性 char[] value,存放的字符序列。

package com.pero.stringbuffer_;

/**
 * @author Pero
 * @version 1.0
 */
public class StringBuffer01 {

    //1.StringBuffer 的直接父类是 AbstractStringBuilder
    //2.StringBuffer 实现了Serializable 接口,即StringBuffer的对象可以串行化,可以保存到文件或者网络传输;
    //3.在父类中 AbstractStringBuilder 有属性 char[] value,不是final的,
    //  该value数组存放字符串内容是存放在堆中,不是存放在常量池中
    //4.StringBuffer是一个final类不可以被继承

    StringBuffer stringBuffer = new StringBuffer("hello");

}

String和StringBuffer对比

1)String保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低(private final char[] value,指向常量池);

2)StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用每次更新地址(当空间不足是更新地址,数组存储空间为16个字符),效率较高(char[] value,放在堆中)。

StringBuffer的构造器

1)StringBuffer()

构造一个其中不带字符串缓冲区,其初始容量为16个字符;

2)StringBuffer(CharSequence seq)

public java.lang.StringBuilder(CharSequence seq)构造一个字符串缓冲区,它包含与指定的CharSequence相同的字符

3)StringBuffer(int capacity)//capacity[容量]

构造一个不带字符的,但是具有指定初始容量的字符缓冲区。即对char[]的容量大小进行指定

4)StringBuffer(String str)

构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。

package com.pero.stringbuffer_;

/**
 * @author Pero
 * @version 1.0
 */
public class StringBuffer02 {
    public static void main(String[] args) {
        //StringBuffer的构造器的使用
        //1.创建一个容量大小为16的char[],用于存放字符内容
        StringBuffer stringBuffer = new StringBuffer();

        //2.通过构造器指定char[]数组的容量大小
        StringBuffer stringBuffer1 = new StringBuffer(100);

        //3.通过给一个String创建StringBuffer,把当前字符串长度加16个字符,
        //  生成一个新的字符数组传给value
        StringBuffer jake = new StringBuffer("jake");
    }
}

String和StringBuffer相互转换

package com.pero.stringbuffer_;

/**
 * @author Pero
 * @version 1.0
 */
public class StringBuffer03 {
    public static void main(String[] args) {
        
        //1.String -> StringBuffer
        String str = "hello tom";
        //方式1:使用构造器
        //返回的才是stringBuffer对象,但是对str本身并无影响
        StringBuffer stringBuffer = new StringBuffer(str);

        //方式2:使用append方法
        StringBuffer stringBuffer1 = new StringBuffer();
        stringBuffer1 = stringBuffer1.append(str);
        
        //StringBuffer ->String
        StringBuffer pero = new StringBuffer("Pero");
        //1.使用StringBuffer提供的toString方法
        String s = pero.toString();
        //2.使用String构造器
        String s1 = new String(pero);
    }
}

StringBuffer常用方法

package com.pero.stringbuffer_;

/**
 * @author Pero
 * @version 1.0
 */
public class StringBuffer04 {
    public static void main(String[] args) {

        StringBuffer s = new StringBuffer("hello");
        //增加
        s.append(',');
        s.append("张三丰");
        s.append("赵敏").append(100).append(true).append(10.5);
        System.out.println(s);  //调用了toSting方法

        //删除
        /**
         * 删除索引为start<=&&<end处的字符
         */
        s.delete(11,14);
        System.out.println(s);

        //修改
        //使用周芷若替换索引为9到11的字符(start<=&&<end处的字符)[9,11)
        s.replace(9,11,"周芷若");

        //查找
        //查找指定的子串在字符串中第一次出现的索引,如果找不到返回-1
        int index = s.indexOf("张三丰");
        System.out.println(index);

        //插入
        //在索引指定一个位置插入字符串
        s.insert(9,"赵敏");
        System.out.println(s);

        //所有增删改插,都是在原有的对象上进行,返回给对象

        //长度
        System.out.println(s.length());
        System.out.println(s);
    }
}

课后练习

package com.pero.stringbuffer_;

/**
 * @author Pero
 * @version 1.0
 */
public class StringBuffer05 {
    public static void main(String[] args) {

        String str = null;
        StringBuffer stringBuffer = new StringBuffer();
        //private AbstractStringBuilder appendNull() {
        //        int c = count;
        //        ensureCapacityInternal(c + 4);
        //        final char[] value = this.value;
        //        value[c++] = 'n';
        //        value[c++] = 'u';
        //        value[c++] = 'l';
        //        value[c++] = 'l';
        //        count = c;
        //        return this;
        //    }
        stringBuffer.append(str);  //将str以"null"字符串形式传进append()方法中
        System.out.println(stringBuffer);
        System.out.println(stringBuffer.length());


        //public StringBuffer(String str) {
        //        super(str.length() + 16);
        //        append(str);
        //    }
        //下面构造器会抛出空指针异常NullPointerException
        StringBuffer stringBuffer1 = new StringBuffer(str);
        System.out.println(stringBuffer1);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值