【Java基础教程】(三十三)常用类库篇 · 第三讲:可变字符串支持类——解析 StringBuffer与 StringBuilder类~

这篇具有很好参考价值的文章主要介绍了【Java基础教程】(三十三)常用类库篇 · 第三讲:可变字符串支持类——解析 StringBuffer与 StringBuilder类~。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Java基础教程】(三十三)常用类库篇 · 第三讲:可变字符串支持类——解析 StringBuffer与 StringBuilder类~,# Java基础教程,java,jvm,开发语言,后端,程序人生

1️⃣ StringBuffer类

1.1 概念

在Java 中,字符串使用 String 类进行表示,但是 String 类所表示的字符串有一个最大的问题:“字符串常量一旦声明则不可改变,而字符串对象可以改变,但是 改变的是其内存地址的指向”。所以String类不适合于被频繁修改的字符串操作, 所以在这种情况下,往往可以使用 StringBuffer 或者StringBuilder类,即 StringBuffer 类或者StringBuilder类更方便用户进行内容的修改。

String 类中使用 “+” 作为数据库的连接操作,而在 StringBuffer类中使用 append() 方法进行数据的连接。方法定义:

public StringBuffer append(数据 类型变量);
//	范例 1: 观察StringBuffer 基本使用
package com.xiaoshan.demo;

public class TestDemo {
	public static void main(String[] args) throws Exception{
		//String类可以直接赋值实例化,但是StringBuffer类不行
		StringBuffer buf = new StringBuffer();              //实例化StringBuffer类对象
		buf.append("Hello ").append("XIAOSHAN ").append("!");
		change(buf);       //引用传递
		System.out.println(buf);
	}	
	public static void change(StringBuffer temp){   // 接收StringBuffer引用
		temp.append("\n").append("'https://blog.csdn.net/lvsongtao1225/category_12367710.html");//修改内容
	}
}

程序执行结果:

Hello XIAOSHAN !
https://blog.csdn.net/lvsongtao1225/category_12367710.html

此程序利用 StringBuffer 类对象实现了引用传递,并且通过最终的结果发现,在 change() 方法中针对 StringBuffer 对象的修改可以影响原始 StringBuffer 类对象,所以 StringBuffer 对象的内容是可以修改的。

StringBuffer类主要用于频繁修改字符串的操作上。但是在任何开发中,面对字符串的操作,大部分情况下都先考虑 String类,只有在需要频繁修改时才会考虑使用 StringBufferStringBuilder类操作。

【Java基础教程】(三十三)常用类库篇 · 第三讲:可变字符串支持类——解析 StringBuffer与 StringBuilder类~,# Java基础教程,java,jvm,开发语言,后端,程序人生

通过以上两个类的定义结构可以发现, String 类与 StringBuffer 类都是 CharSequence 接口的子类,也就证明 StringStringBuffer类的对象都可以利用自动向上转型的操作为 CharSequence 接口实例化。

1.2 特征

StringBuffer类是Java中一个被广泛使用的可变字符串类。它提供了许多方法来操作和修改字符串内容,而不会创建新的对象实例。

以下是StringBuffer类的一些重要特点:

  • 可变性:StringBuffer对象是可变的,意味着可以通过调用相应的方法对其内容进行修改,而不会创建新的对象。相比之下,String对象是不可变的,一旦创建后就无法更改;
  • 线程安全:StringBuffer类是线程安全的,这意味着它的方法在多线程环境中可以安全地使用,不会导致竞态条件或数据不一致的问题。然而,由于其需要额外的同步开销,这可能会影响性能。如果不需要线程安全的操作,可以使用非线程安全的兄弟类StringBuilder,它具有相似的功能但性能更高;
  • 性能考虑:由于字符串是可变的,可以在执行一系列操作后一次性获取最终结果,避免了频繁的字符串拷贝和内存分配,因此在某些情况下,StringBuffer比使用+concat()操作符连接字符串更高效。

1.3 使用

以下是StringBuffer类的一些用法:

  • 字符串操作StringBuffer类提供了一系列方法来操作字符串,如添加字符、插入字符、替换字符、删除字符等。这些方法可以根据需要灵活地修改字符串内容;

  • 连接字符串StringBuffer类也可以用于高效地连接字符串,而不像String那样每次连接都创建一个新的字符串对象。append()方法用于在当前字符串末尾添加字符、字符串和其他数据类型的值;

  • 反转字符串StringBuffer类提供了reverse()方法,用于反转当前字符串的顺序。这对于需要逆序处理字符串的场景很有用。

下面是一个使用StringBuffer类的使用示例:

//	范例 2: StringBuffer类的使用
public static void main(String[] args) {
        // 创建一个空的StringBuffer对象
        StringBuffer sb = new StringBuffer();

        // 在末尾添加字符串
        sb.append("Hello");
        sb.append(" World!");

        // 输出:Hello World!
        System.out.println(sb.toString());

        // 在指定位置插入字符串
        sb.insert(5, "Java ");
        System.out.println(sb.toString());

        // 反转字符串
        sb.reverse();
        System.out.println(sb.toString());
    }

输出结果:

Hello World!
HelloJava  World!
!dlroW  avaJolleH

总之,StringBuffer类是处理可变字符串的强大工具,特别适用于需要经常修改字符串内容的场景。并且它的方法是线程安全的,可以在多线程环境中安全地使用,不会导致竞态条件或数据不一致的问题。但由于其需要额外的同步开销,也同时会影响一些性能。

2️⃣ StringBuilder类

2.1 概念及特征

StringBuilder 是 Java 中的一个类,它允许可变长度的字符串操作。与 String 类不同,StringBuilder 对象的长度和内容都可以修改。这意味着可以在已存在的字符串上进行添加、删除和修改操作,而无需创建新的对象。

以下是该类的一些重要特性:

  • 可变性StringBuilder 具有可变性,这意味着可以动态地更改字符串内容和长度;
  • 高效性:相对于直接使用 + 运算符连接字符串的方式,使用 StringBuilder 在性能上更高效。当需要频繁进行字符串操作时,使用 StringBuilder 可以减少系统开销。

2.2 使用

以下是该类的一些使用方法:

  • 初始化:可以通过无参构造函数创建一个空的 StringBuilder 对象,或者可以根据已存在的字符串创建对象;还可以指定初始容量创建对象。
  • append()方法:用于在当前字符串末尾附加给定的数据;
  • delete()方法:用于删除当前字符串中指定范围内的字符;
  • insert()方法:用于将给定的数据插入到当前字符串的指定位置;
  • replace():该方法用于替换当前字符串指定范围内的字符;
  • reverse():该方法用于逆转当前字符串的字符顺序;
  • toString():该方法用于将 StringBuilder 对象转换为一个普通的字符串。

下面是一个使用StringBuilder类的示例:

//	范例 3: StringBuilder类的使用
public static void main(String[] args) {
        // 创建一个空的 StringBuilder 对象
        StringBuilder sb1 = new StringBuilder();
        // 根据已存在的字符串创建 StringBuilder 对象
        StringBuilder sb2 = new StringBuilder("Hello");
        // 指定初始容量创建 StringBuilder 对象
        StringBuilder sb3 = new StringBuilder(10);

        StringBuilder sb = new StringBuilder();
        sb.append("Hello");
        sb.append("World");
        System.out.println(sb.toString());

        sb.delete(5, 10);
        System.out.println(sb.toString());

        sb.insert(5, " World");
        System.out.println(sb.toString());

        sb.replace(5, 11, " Everybody");
        System.out.println(sb.toString());

        sb.reverse();
        System.out.println(sb.toString());

        String str = sb.toString();
        System.out.println(str);
    }

输出结果:

HelloWorld
Hello
Hello World
Hello Everybody
ydobyrevE olleH
ydobyrevE olleH

除了上面提到的常用方法之外,StringBuilder 还有其他一些方法可以查询和修改字符串。请参考 Java 官方文档 以获取更详尽的信息。

3️⃣ String、StringBuffer和StringBuilder的对比

String类:适用于少量的字符串不变的操作;
StringBuilder类:适用于单线程下在字符串缓冲区进行大量操作;
StringBuffer类:适用于多线程下在字符串缓冲区进行大量操作。

  • String类表示不可变的(immutable)字符串,该类是 final修饰的类,不能被继承且表示字符串常量(字符串常量一旦声明则不可改变,而字符串对象可以改变,改变的是其内存地址的指向),对String修改会产生新的对象,效率低。而StringBuilderStringBuffer均为可变字符串;
  • String类使用 +concat() 方法做数据的连接操作,而在StringBuffer类和StringBuilder类中使用 append()方法进行数据连接;
  • StringBuilder是非线程安全的,不保证同步所以在性能上较高;StringBuffer是线程安全的,该类方法都使用了 synchronized 修饰,所以符合多线程操作中的安全要求。

📑 本文源码下载地址

Java的String类讲解案例代码(String类使用:创建对象、比较、连接、截取、查找和替换、拆分…)

【Java基础教程】(三十三)常用类库篇 · 第三讲:可变字符串支持类——解析 StringBuffer与 StringBuilder类~,# Java基础教程,java,jvm,开发语言,后端,程序人生


温习回顾上一篇(点击跳转)
《【Java基础教程】(三十二)常用类库篇 · 第二讲:包装类 Wrapper Class——概念及用途, 自动装箱与拆箱,常用操作方法~》

继续阅读下一篇(点击跳转)
《【Java基础教程】(三十四)常用类库篇 · 第四讲:Runtime类——API知识汇总分享,深入解析Runtime运行时环境访问支持类~》
文章来源地址https://www.toymoban.com/news/detail-607363.html

【Java基础教程】(三十三)常用类库篇 · 第三讲:可变字符串支持类——解析 StringBuffer与 StringBuilder类~,# Java基础教程,java,jvm,开发语言,后端,程序人生

到了这里,关于【Java基础教程】(三十三)常用类库篇 · 第三讲:可变字符串支持类——解析 StringBuffer与 StringBuilder类~的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java基础教程】(三十一)常用类库篇 · 第一讲:Optional类——解锁Java的Optional操作,消灭那些隐匿的空指针,还程序世界一个安稳!~

    Optional 类是Java 8引入的新特性,旨在解决空值( null )的处理问题 。它的设计目的是为了提供一种更好的方式来处理可能为空的值,避免使用 null 导致空指针异常。 Optional 是一个容器对象,可以持有某个类型的非空值或者空值。它是一个包装类,用于替代可能为空的引用变

    2024年02月15日
    浏览(34)
  • 【Java练习题汇总】《第一行代码JAVA》Java常用类库篇,汇总Java练习题——Optional类、包装类、可变字符串支持类、Runtime类、System类、数学运算类、日期时间处理...

    一、填空题 在 java.lang 包中提供了两个字符串类,分别是________ 和________ 。这两个类都是________ 接口的子类,字符串类提供的求字符串长度的方法是________________ 。 Java 提供的两个大数操作类是________ 和________ 。 对象克隆方法是________ 类提供的,方法名称是________________ ,对

    2024年02月16日
    浏览(38)
  • 第三十九天 Java基础学习(三十三)

    一、Servlet Java类。由Servlet容器(Tomcat)进行编译-.class -运行 产生响应结果返回给客户端浏览器。 生命周期:(方法调用流程) init:初始化方法。在第一次访问servlet时被调用一次。 service:完成servlet所做功能。每次访问servlet时都会被调用。 doGet0:只有get请求。才能访问。 doPos

    2024年02月15日
    浏览(31)
  • 【JavaSE】Java基础语法(三十三):File 一文详解

    File类介绍 它是文件和目录路径名的抽象表示 文件和目录是可以通过File封装成对象的 对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已.它可以是存在的,也 可以是不存在的.将来是要通过具体的操作把这个路径的内容转换为具体存在的 File类的构造方法

    2024年02月06日
    浏览(46)
  • 【Java零基础入门篇】第 ⑦ 期 - 常用类库

    博主:命运之光 专栏:Java零基础入门   学习目标 掌握Java各种常用类库的使用方法。 目录 Java类库 字符串String String 概述 创建字符串对象的2种方式 String类的特点 创建字符串对象的2种方式 总结:创建字符串对象的2种方式区别 字符串的比较 字符串的比较 String类其它常用

    2024年02月04日
    浏览(23)
  • 第三十三章Java快速排序法

            快速排序 (Quicksort)是对 冒泡排序 的一种改进,是一种排序执行效率很高的排序算法。         快速排序的基本思想是:通过一趟排序,将要排序的数据分隔成独立的两部分,其中一部分的所有数据比另外一部分的所有数据都要小,然后再按此方法对这两部分

    2024年02月11日
    浏览(45)
  • 【前端知识】React 基础巩固(三十三)——Redux的使用详解

    针对 React 基础巩固(三十二) 中的案例,我们希望抽取页面中共有的代码(例如下方的代码),使用高阶组件统一拦截。 为了让react和redux产生联系,安装一款工具 react-redux 使用 react-redux ,在index.js中统一注入store 新建about.js页面,通过 react-redux 引入store 在App.jsx中引入新的

    2024年02月15日
    浏览(41)
  • Java常用类库与技巧

    序号 地址 1 计算机网络核心 2 数据库相关 3 Redis 4 Linux相关 5 JVM的内容 6 GC相关的 7 Java多线程与并发 8 Java多线程与并发-原理 9 Java常用类库与技巧 10 Java框架-Spring 1、String,StringBuffer,StringBuilder的区别? 2、Java异常 异常处理机制主要回答了三个问题 What:异常类型回答了什么

    2024年02月10日
    浏览(30)
  • 【从零开始学习JAVA | 第三十三篇】File类

    目录 前言: File类: 构造方法: 常见成员方法: 总结:         本文我们将为大家介绍JAVA中一个比较使用的类:File类,他为我们提供了存储数据的功能,使得程序的数据不至于在运行结束之后就丢失,是一个很好的类。         File类是Java标准库中用于操作文件和目录

    2024年02月15日
    浏览(32)
  • 推荐Java开发常用的工具类库google guava

    Guava Guava是一个Google开源的Java核心库,它提供了许多实用的工具和辅助类,使Java开发更加简洁、高效、可靠。目前和 hutool 一起,是业界常用的工具类库。 shigen 也比较喜欢使用,在这里列举一下常用的工具类库和使用的案例。 参考: 整理一波Guava的使用技巧 - 掘金 Guava中这

    2024年02月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包