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

目录

API

        1.0 StringBuilder 类概念

        1.1StringBuilder 类中构造器

        1.2 StringBuilder 类中 append()方法

        1.3 StringBuilder 类中 reverse() 方法

        1.4 StringBuilder 类中 length() 方法 

        1.5 StringBuilder 类中 toString() 方法

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

        1.7 StringBuilder  与 StringBuffer 比较


API

        1.0 StringBuilder 类概念

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

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

        1.1StringBuilder 类中构造器

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

代码如下:

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.2 StringBuilder 类中 append()方法

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

代码如下:

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);

    }

输出结果:

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

        1.3 StringBuilder 类中 reverse() 方法

        将对象的内容反转。

代码如下:

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.4 StringBuilder 类中 length() 方法 

        返回对象的长度。

代码如下:

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());
    }

运行结果如下:

        1.5 StringBuilder 类中 toString() 方法

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

代码如下:

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“ 这个字符串是不可以改变的
    }

 运行结果如下:

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

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

        举个例子来观察一下:

代码如下:

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);

    }

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

        1.7 StringBuilder  与 StringBuffer 比较

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

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

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

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


猜你喜欢

转载自blog.csdn.net/Tingfeng__/article/details/133786006