StringBuffer类 & StringBuilder 类

StringBuffer类

介绍

StringBuffer是一个容器,代表可变的字符序列,可以对字符串内容进行增删。

StringBuffer是可变长度的。

  • 实现了序列化接口,可实现串行化(可以将内容保存至文件或者网络传输): Serializable

  • 在父类 AbstractStringBuilder 中,有属性:byte[] value; 不是final。

注意:数组存放在堆中,而不是在常量池里面了。

  • StringBuffer是一个final类,不能被继承

【 java 常用类】StringBuffer 源码分析以及 StringBuffer 底层的数组扩容机制_stringbuffer扩容机制_馆主阿牛的博客-CSDN博客

StringBuffer与String对比

1、String保存的是字符串常量,里面的值不能修改,每次String类的更新实际上是更新地址,效率低

2、StringBuffer保存的是字符串变量,里面的值可以更改,每次的更新不用更改地址,效率高

构造器的三种方式

  1. 创建一个 大小为 16的 char[] ,用于存放字符内容
    StringBuffer stringBuffer = new StringBuffer();

2、通过构造器指定 char[] 大小
StringBuffer stringBuffer1 = new StringBuffer(100);

3、通过 给一个String 创建 StringBuffer, char[] 大小就是 str.length() + 16

StringBuffer hello = new StringBuffer(“hello”);

String与StringBuffer间的相互转换

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 stringBuffer3 = new StringBuffer("韩顺平教育");
//方式1 使用StringBuffer提供的 toString方法
String s = stringBuffer3.toString();
//方式2: 使用构造器来搞定
String s1 = new String(stringBuffer3);

StringBuffer常用方法

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

        StringBuffer s = new StringBuffer("hello");
        //增
        s.append(',');// "hello,"
        s.append("张三丰");//"hello,张三丰"
        s.append("赵敏").append(100).append(true).append(10.5);//"hello,张三丰赵敏100true10.5"
        System.out.println(s);//"hello,张三丰赵敏100true10.5"


        // 删除
        // 删除索引为>=start && 

练习题

StringBuffer类 & StringBuilder 类_第1张图片
StringBuffer类 & StringBuilder 类_第2张图片

public class StringBufferExercise01 {
    public static void main(String[] args) {
        String name = null;
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append(name);
        // 输出为 4
        System.out.println(stringBuffer.length());
        // 构造方法中传null,报 NullPointerException
        StringBuffer stringBuffer1 = new StringBuffer(name);
        System.out.println(stringBuffer1);
    }
}

第二题:

StringBuffer类 & StringBuilder 类_第3张图片

String s = new String("12.343");
StringBuffer stringBuffer = new StringBuffer(s);
for (int i = s.lastIndexOf(".") - 3; i > 0; i-=3 ){
    stringBuffer.insert(i, ",");
}
System.out.println(stringBuffer);

StringBuilder

基本介绍

1、一个可变的字符序列,此类提供一个与StringBuffer兼容的API,注意,方法也不是完全一致(StringBuilder不支持线程安全,即在多线程中使用会不安全)。

该类的设计目的为StringBuffer的一个简易替换,**用在字符串缓冲区被单个线程使用的时候,**如果可以的话,建议优先采用该类,因为在大多数情况下,它要比StringBuffer快的多

2、在StringBuilder上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。

3、Serializable接口:表示可以串行化,数据可以进行网络传输或者保存至文件。

4、StringBuilder继承了AbstractStringBuilder 类,跟StringBuffer一样,数据放在 char[] value;

5、final类,不可以被继承

6、StringBuilder的方法中,没有做互斥的处理,即没有synchronized关键字。

对比总结

StringBuffer类 & StringBuilder 类_第4张图片
StringBuffer类 & StringBuilder 类_第5张图片

你可能感兴趣的:(python,开发语言)