当前位置: 首页 > news >正文

进阶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 类来获得更好的性能。


相关文章:

  • 正则表达式——^的两种用法
  • MacOS Pro笔记本硬盘升级纪实
  • Flink-SQL join 优化 -- MiniBatch + local-global
  • 如何在 Spring Boot 中实现容错机制
  • 【原创】ubuntu18修改IP地址
  • 代码随想录算法训练营第四十四天| 01背包问题 二维、01背包问题 一维、416. 分割等和子集
  • 使用Tensorrt的一般步骤
  • FastAPI学习-27 使用@app.api_route() 设置多种请求方式
  • 华为云云耀云服务器L实例评测|华为云上的CentOS性能监测与调优指南
  • 9-2-Dataset创建-import调用
  • Android 10.0 framework层实现app默认全屏显示
  • VNF1048F高侧开关控制器具有智能保险丝保护,适用于12v, 24v和48v汽车应用
  • 跳表C语言
  • “华为杯”研究生数学建模竞赛2019年-【华为杯】F题:智能飞行器航迹规划模型(下)(附优秀论文及Pyhton代码实现)
  • 几种预训练模型微调方法和peft包的使用介绍
  • 奥威BI系统:做数据可视化大屏,又快又简单
  • SpringCloud小项目——订单积分商城 使用Nacos、Open Feign、Gateway、Sentinel技术栈
  • 一般香港服务器带宽选多大够用?(带宽计算方法)
  • 两数之和[中等]
  • cesium 地图蒙版遮罩效果
  • 巴基斯坦称对印精准打击造成设施损坏和人员伤亡
  • 人民时评:透过上海车展读懂三组密码
  • 经彩申城!上海网络大V沙龙活动走进闵行
  • 身临其境感受伟人思想力量,“马克思书房”在上海社科馆揭幕
  • 九家企业与上海静安集中签约,投资额超10亿元
  • 如此城市|上海老邬:《爱情神话》就是我生活的一部分