StringBuffer类 StringBuilder 类

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.hqwc.cn/news/22829.html

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

相关文章

webpack项目和vue项目发布,浏览器存在缓存

项目是webpack搭建的每次发步到线上&#xff0c;经常需要手动清楚浏览器缓存才能有效果。vue项目设置在最下面 项目打包的js&#xff08;css也是一致&#xff09;名称都采用哈希值 问题&#xff1a;哈希值在有些情况下打包会不变&#xff0c;导致浏览器使用自己缓存的资源 解…

wordpress主题zibll子比主题v7.2.2绕授权+教程

1、先说一下要准备的东西 一份子比7.1正式包&#xff0c;一台服务器&#xff0c;wp6.2.2正式包&#xff08;wordpress&#xff09;&#xff0c;一个域名 2、首先把wp上传服务器的域名根目录下&#xff0c;然后打开前台按要求填写数据库和管理员邮箱账号密码&#xff0c;php版本…

Sql 语句小课堂8:求特定字段平均值的问题

Sql 语句小课堂8&#xff1a;求特定字段平均值的问题 问题来源初始数据超标条件方案一&#xff1a;得出汇总结果方案二&#xff1a;在原有数据上附加其结果 小结 问题来源 最近老顾变得原来越咸鱼了&#xff0c;好久没去逛 CSDN 问答了&#xff0c;于是灵感枯竭&#xff0c;不…

云计算——云计算关键技术

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 一.云计算关键技术 1.虚拟化技术 2.分布式数据存储技术 &#xff08;1&…

Java正则表达式捕获组

捕获组是将多个字符视为一个单元的一种方法。 它们是通过将要分组的字符放在一组括号中来创建的。 例如&#xff0c;正则表达式(dog)创建包含字母d&#xff0c;o和g的单个组。 捕获组通过从左到右计算它们的左括号来编号。 在表达式((A)(B(C)))中&#xff0c;例如&#xff0c;…

taro-ui-vue3 的虚拟列表组件VirtualScroll

项目&#xff1a;taro3vue3 用法&#xff1a; <at-virtual-scrollbench"5":height"listHeight":items"fieldList":item-height"itemHeight" ><template #default"{ index, item }"><view :id"merchan…

浏览器视口

目录 css单位相对单位绝对单位 像素分类物理像素逻辑像素css像素 DPRPPI浏览器视口布局视口视觉视口理想视口 css单位 在css中我们会使用到许多单位&#xff0c;如px&#xff0c;em&#xff0c;rem&#xff0c;vw&#xff0c;vh等等 整体上&#xff0c;我们可以将它们分成两类…

windows下安装consul、springboot整合consul

Spring Cloud Consul通过自动配置和绑定到Spring Environment和其他Spring编程模型习语&#xff0c;为Spring Boot应用程序提供Consul集成。通过一些简单的注解&#xff0c;可以快速启用和配置应用程序内的常用模式&#xff0c;并使用Hashicorp的Consul构建大型分布式系统。提供…

Elasticsearch--查询(nested、join)

nested 嵌套类型 数据的某个值是json、object对象&#xff1b;不再是简单的数据类型&#xff0c;或者简单数据类型的数组&#xff1b;那么还用之前的查询方式就有问题了。因为ES在存储复杂类型的时候会把对象的复杂层次结果扁平化为一个键值对列表 。此时&#xff0c;需要用n…

MyBatis 中如何使用缓存

MyBatis 中如何使用缓存 MyBatis 是一个基于 Java 的持久层框架&#xff0c;它提供了多种方式来使用缓存&#xff0c;包括一级缓存和二级缓存。本文将介绍 MyBatis 中常见的缓存使用方式及其使用方法。 1. 一级缓存 MyBatis 中的一级缓存是指 SqlSession 的缓存&#xff0c;它…

2023机器人操作系统(ROS)暑期学校预热-线下时间/地点-(转发)

原文地址&#xff1a; https://mp.weixin.qq.com/s/McjBgCpecL6OMgpcrPyY_Q 中国机器人操作系统&#xff08;ROS&#xff09;暑期学校自2015年举办以来&#xff0c;被中国机器人业界和学界&#xff0c;以及ROS开源基金会誉为除了ROSCon之外规模最大、参与人数最多、最成功的RO…

【JAVA】与数字相关的类,Number Math 类

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言数据类型Number类介绍数据格式化实例 Math类介绍静态常量实例 前言 为了解决对数字、日期和系统设置进行处理的困难&#xff0c;如&#xff1a;一些数字&数学问题、随机…