• 作者:老汪软件
  • 发表时间:2023-12-30 21:00
  • 浏览量:

目录

API 1.0 类概念

代表可变字符串对象,相当于一个容器,它装的字符串是可以改变的,就是用来操作字符串的。

对比与一般的 类 会更加好操作字符串,因为用 类型的字符串是不可变的,而 类型的字符串是可以改变的。

1. 类中构造器

可以通过两种形式来创建 类型的对象;分别是有参数构造器和无参数构造器。

代码如下:

public class StringBuilderAppend {
    public static void main(String[] args) {
        //根据无参数构造器来创建对象,代表一开始就是空字符串“”
        StringBuilder stringBuilder1 = new StringBuilder();
        System.out.println(stringBuilder1);
        //根据有参数构造器来创建对象,代表一开始就是有自定义的字符串
        String str = "lisi";
        StringBuilder stringBuilder2 = new StringBuilder(str);
        System.out.println(stringBuilder2);
    }
}

1. 类中()方法

添加数据任何数据并返回 类型对象本身。

代码如下:

public class StringBuilderAppend {
    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(11);
        stringBuilder.append(2.2);
        stringBuilder.append('a');
        stringBuilder.append("lisi");
        System.out.println(stringBuilder);
    }

输出结果:

进阶JAVA篇-StringBuilder类与StringBuffer类的常用API(二)

需要注意的是,每次添加完数据之后,返回来的是对象本身,不会创建新的对象。

1. 类中 () 方法

将对象的内容反转。

代码如下:

public class StringBuilderAppend {
    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(11);
        stringBuilder.append(2.2);
        stringBuilder.append('a');
        stringBuilder.append("lisi");
        System.out.println(stringBuilder);
        stringBuilder.reverse();
        System.out.println(stringBuilder);
    }

运行结果如下:

同样需要注意的是,反转回来的也是对象本身,不会创建新的对象。

1. 类中 () 方法

返回对象的长度。

代码如下:

public class StringBuilderAppend {
    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(11);
        stringBuilder.append(2.2);
        stringBuilder.append('a');
        stringBuilder.append("lisi");
        System.out.println(stringBuilder);
        stringBuilder.reverse();
        System.out.println(stringBuilder);
        
        //返回字符串个数
        System.out.println(stringBuilder.length());
    }

运行结果如下:

进阶JAVA篇-StringBuilder类与StringBuffer类的常用API(二)

1. 类中 ()方法

将 类型的对象转变为 类型的对象。

代码如下:

public class StringBuilderAppend {
    public static void main(String[] args) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(11);
        stringBuilder.append(2.2);
        stringBuilder.append('a');
        stringBuilder.append("lisi");
        System.out.println(stringBuilder);
        stringBuilder.reverse();
        System.out.println(stringBuilder);
        System.out.println(stringBuilder.length());
        String s = stringBuilder.toString();
        //先是 stringBuilder类 去调用静态 toString() 方法
        //然后得到一个 toString 类型的字符串 ,然后用String 类型的变量 s 来接收
        System.out.println(s.toString());
        //然后s 对象去调用已经重写Object 中的toString() 方法
        //最后输出内容:”isila2.211“ 这个字符串是不可以改变的
    }

运行结果如下:

进阶JAVA篇-StringBuilder类与StringBuffer类的常用API(二)

1.6为什么操作字符串的建议使用 类型 ,而不建议 类型?

最本质的原因就是, 类型的字符串 对字符串操作之后都会返回对象本身,不会创建新的对象,而 类型的字符串 每一次对字符串操作之后都会在栈区上 new 一个新的 类型的对象,所以操作 类型的字符串 的效率不如操作 类型的字符串。

举个例子来观察一下:

代码如下:

public class StringBuilderAppend {
    public static void main(String[] args) {
        String str = "";
        int n = 10000000;
        for (int i = 0; i < n; i++) {
            str += "lisi";
        }
        System.out.println(str);
        
    }

public class StringBuilderAppend {
    public static void main(String[] args) {
        StringBuilder str = new StringBuilder();
        int n = 10000000;
        for (int i = 0; i < n; i++) {
            str.append("lisi");
        }
        System.out.println(str);
    }

这两个代码,都可以在你的电脑去运行一下,看看第一个代码直到运行结束需要多长时间,而第二个代码几乎是眨几下眼的功夫就运行结束了。

进阶JAVA篇-StringBuilder类与StringBuffer类的常用API(二)

1. 与 比较

类中的API 与 类API 用法是一摸一样的。 类和 类都是可变字符串类,它们的用途是为了处理字符串的拼接和修改操作。

类是线程安全的,可以被多个线程同时访问和修改,但是性能相对较低。它的方法都是同步的,也就是说在多线程环境下,每个方法都会被锁住,保证线程安全。

类是线程不安全的,只能被单个线程访问和修改,但是性能相对较高。它的方法没有进行同步,所以在单线程环境下可以获得更好的性能。

两者的使用方法几乎完全相同,都提供了一系列的方法用于字符串的操作,例如拼接、插入、删除、替换等。区别在于线程安全性和性能。如果在多线程环境下需要进行字符串操作,应该使用 类;如果在单线程环境下需要进行字符串操作,可以使用 类来获得更好的性能。