StringBuffer类 StringBuilder 类

news/2024/4/25 10:05:46/文章来源:https://blog.csdn.net/qq_42571592/article/details/131733109

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"//查找指定的子串在字符串第一次出现的索引,如果找不到返回-1int 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());//22System.out.println(s);}
}

练习题

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

public class StringBufferExercise01 {public static void main(String[] args) {String name = null;StringBuffer stringBuffer = new StringBuffer();stringBuffer.append(name);// 输出为 4System.out.println(stringBuffer.length());// 构造方法中传null,报 NullPointerExceptionStringBuffer 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.luyixian.cn/news_show_331158.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Java的网络编程

网络的一些了解 网络通信协议 链路层&#xff1a;链路层是用于定义物理传输通道&#xff0c;通常是对某些网络连接设备的驱动协议&#xff0c;例如针对光纤、网线提供的驱动。网络层&#xff1a;网络层是整个TCP/IP协议的核心&#xff0c;它主要用于将传输的数据进行分组&…

华为申请注册盘古大模型商标;京东推出言犀大模型,率先布局产业应用

7月14日科技新闻早知道&#xff0c;一分钟速览。 1.华为申请注册盘古大模型商标&#xff1a; 据天眼查 App 显示&#xff0c;7 月 7 日&#xff0c;华为技术有限公司申请注册“华为云盘古”、“Huawei Cloud Pangu Models”文字及图形商标&#xff0c;国际分类为网站服务、社…

文心一言 VS 讯飞星火 VS chatgpt (59)-- 算法导论6.4 3题

文心一言 VS 讯飞星火 VS chatgpt &#xff08;59&#xff09;-- 算法导论6.4 3题 三、对于一个按升序排列的包含 n 个元素的有序数组 A 来说&#xff0c;HEAPSORT 的时间复杂度是多少?如果 A 是降序呢? 文心一言&#xff1a; 对于一个按升序排列的包含 n 个元素的有序数组…

C++图形开发(14):游戏完善——无限空中起跳解决

文章目录 1.问题描述2.如何解决&#xff1f;3.整段代码 1.问题描述 在游玩过程中&#xff0c;我们肯定发现了之前所给出的游戏源码中的一个小bug&#xff1a; 小球可以空中无限起跳&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&…

【Linux操作系统】多线程抢票逻辑——学习互斥量(锁)函数接口

文章目录 1.进程线程间的互斥相关背景概念2.联系代码学习同步互斥问题3.互斥量&#xff08;锁&#xff09;的函数接口3.1初始化互斥量3.2销毁互斥量3.3互斥量加锁和解锁3.4改进多线程抢票代码 1.进程线程间的互斥相关背景概念 临界资源&#xff1a;多线程执行流共享的资源就叫…

在UI中使用SpriteMask裁减任意shader的粒子效果

前言 由于我们需要在Mask中对粒子效果进行裁减。但是我们的的特效同事不愿意每个shader都去添加Stencil。所以使用SpriteMask方式进行裁减。 使用步骤 1. 添加SpriteMask Component 更具你需要的Mask形状设置精灵图片。又因为实际是精灵&#xff0c;并不属于UI系统&#xff…

静态库 的制作与使用

文章目录 重要命令程序组成静态库制作流程静态库的使用 gcc main.c -o APP -I(i) 头文件路径 -l(L) 库名字&#xff08;xxx) -L 库路径 重要命令 gcc -o -I(大写i) -l(小写L) -L cp&#xff1a;复制文件 -r 递归&#xff0c;用于复制文件夹所有文件 mv&#xff1a;移动文件 程…

【ArcGIS Pro二次开发】(46):要素类从上到下、从左到右排序

要素类经过编辑之后&#xff0c;【OBJECTID】字段会变得不规律。应部分网友要求&#xff0c;做了这个从上到下、从左到右排序的工具。 不过后来在ArcGIS Pro中发现了一个【排序】工具&#xff0c;已经可以完美实现这个功能需求&#xff0c;发现自己做了个白工。 不过做了不能白…

【统计函数3】——excel常见函数

相关数据资料来源于网易 函数一览&#xff1a; rank、rand、randbetween、floor、int rank函数: 求某单元格在某区域内的排名 RANK(数值,引用区域,降序0/升序1)范围多指定&#xff1a; 分开的范围之间可用逗号隔开&#xff0c;最后再用一个小括号括起来。F4可以快速锁定行和列。…

20230714----重返学习-DOM-diff算法-构建工具-包管理工具-Vite基本使用-Vue3新特性

day-112-one-hundred-and-twelve-20230714-DOM-diff算法-构建工具-包管理工具-Vite基本使用-Vue3新特性 DOM-diff算法 vue2中diff算法 同级比对&#xff0c;跨级比对性能差。而且采用的方式是递归比对&#xff0c;更差一点。根节点只能有一个&#xff0c;比对的时候会从根节…

MySql5.6版本开启慢SQL功能

文章目录 1引言1.1目的1.2注意点说明1.3 操作步骤1.3.1 临时生效操作步骤1.3.2 永久生效操作步骤1.3.3 按日期生成日志文件1.3.4 执行成功后验证功能是否开启 1.4 慢SQL日志记录内容介绍1.5 Shell脚本 1引言 1.1目的 开启 MySQL 的慢查询日志&#xff08;Slow Query Log&…

【Distributed】分布式Ceph存储系统

文章目录 一、存储基础1. 单机存储设备1.1 DAS1.2 NAS1.3 SAN1.4 单机存储的问题1.5 商业存储解决方案 2. 分布式存储&#xff08;软件定义的存储 SDS &#xff09;分布式存储的类型 3. Ceph 简介4. Ceph 优势5. Ceph 架构6. Ceph 核心组件7. OSD 存储后端7.1 Filestore7.2 Blu…

微服务架构+创建微服务工程(商品/订单)

目录 1.微服务架构 1.1.单体应用架构 1.2.微服务应用 1.3 微服务架构的优势 1.4.微服务架构的缺点(挑战) 1.5. SpringCloud与微服务关系 1.6.SpringBoot和SpringCloud关系 2. 创建微服务工程 2.1.数据库 2.2.搭建父工程 2.2 创建公共模块 2.3.商品系统 2.4.订单微…

在Linux中使用curl访问EasyCVR页面,返回报错Unauthorized是什么原因?

EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&#xff0c;比如&#xff1a;视…

检测到错误页面web应用服务器版本信息泄露

详细描述 Web服务器未能正确处理异常请求导致Web服务器版本信息泄露&#xff0c;攻击者收集到服务器信息后可进行进一步针对性攻击。 解决办法 临时修复建议如下&#xff1a; 1、关闭web服务器错误提示。 2、关闭运行平台的错误提示。 3、建立错误机制&#xff0c;不要把真实…

力扣 198.打家劫舍【中等】

198.打家劫舍 1 题目2 思路3 代码4 结果 1 题目 题目来源&#xff1a;力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/house-robber 题目&#xff1a;你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃…

优化产品知识库的 SEO 技巧

在当今数字化的商业环境中&#xff0c;为产品知识库进行搜索引擎优化&#xff08;SEO&#xff09;是至关重要的。随着用户越来越倾向于通过搜索引擎获取信息&#xff0c;优化产品知识库可以帮助你的企业在竞争激烈的市场中脱颖而出。 通过改进SEO&#xff0c;你可以帮助用户找到…

K8S V1.25.11安装以及踩坑之旅

说明&#xff1a; 系统&#xff1a;centos9 stream K8S版本&#xff1a;V1.25.11&#xff08;不要装最新的&#xff0c;后续的可视化界面安装的是个坑&#xff0c;基本上不支持&#xff0c;时间&#xff1a;2023年7月14日&#xff09; Docker版本&#xff1a;20.10.16 (不要…

4.postgresql--rollup,grouping sets,cube

PostgreSQL ROLLUP 是group by 的子句&#xff0c;是生成多个分组集合的快捷功能。与Cube子句的差异是&#xff0c;rollup 不生成基于特定列所有可能的分组集合&#xff0c;生成分组集合为其子集。 ROLLUP假设输入列之间存在层次结构&#xff0c;从而生成有意义的所有分组集合…

力扣21. 合并两个有序链表

题目 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 链接&#xff1a;21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 题解 设置两个指针head和tail&#xff0c;head用来指向新链表的头结点&#xff0c;tail…