StringBuffer类 StringBuilder 类

news2025/1/17 3:13:11

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 && <end 处的字符
        // 解读: 删除 11~14的字符 [11, 14)
        s.delete(11, 14);
        System.out.println(s);//"hello,张三丰赵敏true10.5

        //改
        //老韩解读,使用 周芷若 替换 索引9-14的字符 [9,14)
        s.replace(9, 14, "周芷若");
        System.out.println(s);//"hello,张三丰周芷若true10.5"

        //查找指定的子串在字符串第一次出现的索引,如果找不到返回-1
        int indexOf = s.indexOf("张三丰");
        System.out.println(indexOf);//6

        //插
        //老韩解读,在索引为9的位置插入 "赵敏",原来索引为9的内容自动后移
        s.insert(9, "赵敏");
        System.out.println(s);//"hello,张三丰赵敏周芷若true10.5"

        //获取长度
        System.out.println(s.length());//22
        System.out.println(s);

    }
}

练习题

在这里插入图片描述
在这里插入图片描述

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

第二题:

在这里插入图片描述

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关键字。

对比总结

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/755433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

吴恩达机器学习2022-Jupyter-机器学习实例

1 可选实验: 特征工程和多项式回归 1.1 目标 在这个实验室里: 探索特征工程和多项式回归&#xff0c;它可以让你使用线性回归机制来适应非常复杂&#xff0c;甚至非常非线性的函数。 1.2 工具 您将利用在以前的实验中开发的函数以及matplotlib和NumPy。 2 特征工程与多项式…

Linux内核模块开发 第 9 章 谈及设备文件

The Linux Kernel Module Programming Guide Peter Jay Salzman, Michael Burian, Ori Pomerantz, Bob Mottram, Jim Huang译 断水客&#xff08;WaterCutter&#xff09;源 LKMPG 9 谈及设备文件 设备文件被用于表示物理设备。多数物理设备既被用于输入&#xff0c;也被用…

【使用机器学习和深度学习对城市声音进行分类】基于两种技术(ML和DL)对音频数据(城市声音)进行分类(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

OpenCV开发实战 --(C++/Python) 进行视频中的简单背景估计-附源码

在许多计算机视觉应用中,您可以使用的处理能力较低。在这种情况下,我们必须使用简单但有效的技术。 在这篇文章中,我们将介绍一种这样的技术,用于在相机静态且场景中存在一些移动物体时估计场景的背景。这种情况并不少见。例如,许多交通和监控摄像头都是固定固定的。 时间…

Python爬虫——urllib_请求对象定制

UA介绍&#xff1a; User Agent中文名为用户代理&#xff0c;j简称UA&#xff0c;它是一个特殊字符串头&#xff0c;使得服务器能够识别客户使用的操作系统及版本&#xff0c;cpu类型&#xff0c;浏览器及版本&#xff0c;浏览器内核&#xff0c;浏览器渲染引擎&#xff0c;浏览…

【编译之美】【4. 代码优化:为什么你的代码比他的更高效】

什么是代码优化 代码优化是编译器后端的两大工作之一&#xff0c;弄懂它&#xff0c;你就掌握了一大块后端技术。 代码优化的目标 代码优化的目标&#xff0c;是优化程序对计算机资源的使用。 代码优化的对象 大多数的代码优化都是在 IR 上做的&#xff0c;而不是在前一阶段…

wvp-GB28181-pro /ZLMediaKit 部署学习

前言&#xff1a; 请认真阅读作者提供的文档&#xff01;认真阅读&#xff01;认真阅读&#xff01;认真阅读&#xff01; 背景&#xff1a; 公司项目需要对接不同地方的监控设备&#xff08;海康、大华、火星等等未知设备&#xff09;。由于本人对于海康设备不太了解出现一大…

CAD Exchanger SDK 3.20.0 for Linux Crack

引入新格式 Autodesk Revit&#xff0c;支持 BIM 特定数据模型以及 CAD Exchanger 3.19.0 中的原生格式 CDXBIM 独立于 Revit 软件读取 RVT 文件&#xff0c;使用 BIM 特定数据模型探索 BIM 属性&#xff0c;并利用我们专有的 BIM 友好 CDXBIM 格式更快地加载大型模型。 BIM数…

运维自动化前三阶段

运维自动化前三阶段 纯手工阶段&#xff1a;手工操作重复地进行软件部署和运维&#xff1b; 脚本阶段&#xff1a;通过编写脚本、方便地进行软件部署和运维&#xff1b; 工具阶段&#xff1a;借助第三方工具高效、方便地进行软件部署和运维。 这几个阶段是随着运维知识、经验…

tcn介绍

tcn 介绍 背景 对于大多数深度学习从业者来说&#xff0c;序列建模是递归网络的代名词。 然而&#xff0c;最近的结果表明&#xff0c;卷积架构在音频合成和机器翻译等任务上可以优于递归网络。给定一个新的序列建模任务或数据集&#xff0c;应该使用哪种架构&#xff1f;我…

Apple visionOS UI设计规范

果发布首款 MR 设备 Vision Pro&#xff0c;正在倡导用于Vision Pro在真实空间中显示应用程序窗口和内容“空间用户界面设计”&#xff0c;苹果的设计团队解释了开发人员应该知道的空间用户界面设计的原则。visionOSUI设计规范 支持&#xff1a;sketch Vision Pro中安装的visio…

无线电音频-BPA600蓝牙协议分析仪名词解析

1 介绍 2 Baseband基带分析 (1)Delta 是什么含义? "Delta" 有多个含义,取决于上下文。以下是常见的几种含义: 希腊字母:Delta&#x

“layui助力博客管理升级!用增删改查功能打造优质博客体验“

目录 引文1.前置条件2.数据接口2.1 UserDao(CRUD)2.2 R工具类 3.HTML 结构3.1 主界面的HTML3.2 用户的查询所有界面的HTML3.3 新增修改通用的的HTML 4.JavaScript 代码4.1 用户的CRUD javaScript 代码(userManage)4.2 新增修改的javaScript代码(userEdit) 5. 运行截图总结 引文…

【SpringBoot构建Hippo4j-Client安装部署教程】

&#x1f680; 线程池管理工具-Hippo4j &#x1f680; &#x1f332; AI工具、AI绘图、AI专栏 &#x1f340; &#x1f332; 如果你想学到最前沿、最火爆的技术&#xff0c;赶快加入吧✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;CSDN-Java领域优质创作者&#…

uniapp和uview组件实现下拉触底刷新列表

下面是一个在UniApp中使用uView组件实现下拉触底刷新列表的示例&#xff0c;并使用Axios来请求分页数据列表&#xff1a; 首先&#xff0c;确保你已经在UniApp项目中添加了uView组件库。你可以在项目根目录执行以下命令安装它们&#xff1a; npm install uview-ui或者使用 Hb…

一文速览大语言模型在分子领域中的探索

随着 ChatGPT 的快速崛起&#xff0c;大型语言模型&#xff08;LLM&#xff09;已经在人类语言建模领域展示出了其非凡的能力。无论是证明数学公式、编写代码&#xff0c;还是以不同的风格创作诗歌&#xff0c;LLM 都能胜任。然而&#xff0c;尽管 LLM 在人类语言的掌握上已达到…

1、网络基础

网络发展背景、IP、端口、网络通信协议&#xff0c;TCP/IP五层模型、字节序 一、网络发展背景 局域网&#xff1a;网络覆盖在1000m以内的网络 城域网&#xff1a;网络覆盖在20km以内的网络 广域网&#xff1a;网络覆盖在20km以上的网络 因特网、互联网&#xff1a;更大的国…

SSH跳转远程目标服务器的高阶使用

在日常开发和运维的过程中&#xff0c;我一般是使用Xshell的工具对linux服务器的相关操作。我说一下我写这篇文章的背景&#xff1a;甲方因为安全需要&#xff0c;给了一台可以通过vpn访问的跳板机&#xff0c;通过这台跳板机去操作另外的十多台应用服务器&#xff0c;那么肯定…

MySQL 8目录结构与源码

目录 一、主要目录结构 二、获取MySQL 源代码 一、主要目录结构 MySQL的主要目录结构说明bin目录所有MySQL的可执行文件。如&#xff1a;mysql.exedata目录系统数据库所在的目录my.ini文件MySQL的主要配置文件D:\MySQL\Data用户创建的数据库所在的目录 二、获取MySQL 源代码 …

【OpenCV • c++】图像几何变换 | 图像平移

&#x1f680; 个人简介&#xff1a;CSDN「博客新星」TOP 10 &#xff0c; C/C 领域新星创作者&#x1f49f; 作 者&#xff1a;锡兰_CC ❣️&#x1f4dd; 专 栏&#xff1a;【OpenCV • c】计算机视觉&#x1f308; 若有帮助&#xff0c;还请关注➕点赞➕收藏&#xff…