Java StringBuffer 与StringBuilder 类的介绍与区别
- StringBuffer类(用来解决String类的内存浪费问题)
- 构造方法
- 方法
- public synchronized StringBuffer append (String str);
- public synchronized StringBuffer insert(int i , String str/int i/char/...)
- public synchronized StringBuffer delete(int start , int end);
- public synchronized StringBuffer deleteCharAt(int index);
- public synchronized StringBuffer replace(int start, int end, String str)
- public synchronized StringBuffer reverse()
- public synchronized String substring(int start)
- public synchronized String substring(int start, int end)
- StringBuilder类
- StringBuffer与StringBuilder共同点与区别
- synchronized关键字的作用
StringBuffer类(用来解决String类的内存浪费问题)
- 由于
String类型创建字符串每次改变后都会创建新的对象,旧的对象地址不会及时的被Java垃圾回收机制回收,造成内存的浪费 - **所以我们可以引用
StringBuffer类来处理字符串,StringBuffer类带缓冲区,弥补了String不可改变字符串的缺点,char[] value是StringBuffer类中的数组,默认16长度,装满16元素后会进行数组扩容(数组长度*2+2) **
构造方法
public StringBuffer(); 无参构造
public StringBuffer( String ); 有参构造,初始化字符串
public StringBuffer( int );有参构造,初始化缓冲区大小,即底层数组大小
方法
StringBuffer stringBuffer = new StringBuffer();//无参构造
StringBuffer stringBuffer1 = new StringBuffer("abc");//有参构造
StringBuffer stringBuffer2 = new StringBuffer(123);//有参构造指定数组长度
public synchronized StringBuffer append (String str);
stringBuffer.append("abc");
//结果:拼接字符串 相当于String中的'+';
public synchronized StringBuffer insert(int i , String str/int i/char/...)
stringBuffer.insert(1,"123");
//从指定位置,插入字符串/整数/字符...
public synchronized StringBuffer delete(int start , int end);
stringBuffer.delete(1, 3);
//删除指定片段,包含开始位置,不包含结束位置
public synchronized StringBuffer deleteCharAt(int index);
stringBuffer.deleteCharAt(0);
//删除指定位置;
public synchronized StringBuffer replace(int start, int end, String str)
stringBuffer.replace(0,stringBuffer.length(), "123");
//替换指定区域字符串;
public synchronized StringBuffer reverse()
stringBuffer.reverse();
//翻转字符串
public synchronized String substring(int start)
String str1 = stringBuffer.substring(1);
//从某一位置开始截取字符串,返回String类型,注意:不会改变原来类里面的字符串
public synchronized String substring(int start, int end)
String str2 = stringBuffer.substring(1,2)
//截取某一区域的字符串,不包含结束位置,返回值为String,不会改变原来的字符串
StringBuilder类
方法与StringBuffer类似,区别是StringBuffer的方法被synchronized修饰,而StringBuilder方法没有被修饰
StringBuffer与StringBuilder共同点与区别
共同点
- 字符串是可以改变的,不会创建对象,变的只是底层的数组在改变
区别
- 由于
StringBuffer的方法是被synchronized修饰的,表示一次只允许一个请求进入方法,适合多线程场景 StringBuilder不是加锁的(即它的方法不被synchronized修饰),一次可以允许多个请求进入方法适合单用户操作
synchronized关键字的作用
synchronized关键字的作用如下:
synchronized是一种Java语言中的关键字,用于控制多线程并发访问共享资源的一种机制。synchronized可以保证在同一时刻只有一个线程可以访问共享资源,从而避免了多个线程同时访问共享资源所带来的数据不一致性和线程安全问题。synchronized关键字可以将任意的非空对象作为锁,在Java虚拟机JVM中,对象的锁被称为对象监视器(Object Monitor),每个对象都具有其对象监视器,同一时间,一个对象的监视器只能被一个线程所持有。
Java StringBuffer 与StringBuilder 类的介绍与区别的更多相关文章
- Java StringBuffer和StringBuilder类
Java StringBuffer和StringBuilder类 当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类. 和String类不同的是,StringBu ...
- Java 12 - Java StringBuffer和StringBuilder类
Java StringBuffer和StringBuilder类 当对字符串进行修改的时候,需要使用StringBuffer和StringBuilder类. 和String类不同的是,StringBu ...
- Java StringBuffer 和 StringBuilder 类
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类. 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够 ...
- java -> StringBuffer与StringBuilder类
字符串缓冲区 StringBuffer类 在学习String类时,API中说字符串缓冲区支持可变的字符串,什么是字符串缓冲区呢?接下来我们来研究下字符串缓冲区. 查阅StringBuffer的API, ...
- 20180715-Java StringBuffer和StringBuilder类
public class Test{ public static void main(String args[]){ StringBuffer sBuffer = new StringBuffer(& ...
- JAVA String、StringBuffer、StringBuilder类解读
JAVA String.StringBuffer.StringBuilder类解读 字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作 ...
- Java ——String 类 StringBuffer 和 StringBuilder类 随机字符
本节重点思维导图 String 类 创建字符串 String str = "I love ai"; 在代码中遇到字符串常量时,"I love ai",编译器会使 ...
- String、StringBuffer和StringBuilder类的区别
Java提供了String.StringBuffer和StringBuilder类来封装字符串,并提供了一系列操作字符串对象的方法. 它们的相同点是都用来封装字符串:都实现了CharSequence接 ...
- StringBuffer 和 StringBuilder 类
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类. 和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够 ...
- AJPFX关于StringBuffer,StringBuilder类 总结(一)
StringBuffer,StringBuilder类 StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高 StringBuffer:概述1) ...
随机推荐
- 微软自带的Hyper-V虚拟机使用、VMware16安装Win10虚拟机介绍
一.首先介绍VMware虚拟机. 安装WIN10统虚拟机推荐用VMware16. 1.镜像网址: MSD网址传送门1:https://msdn.itellyou.cn MSD新网址传送门2:https ...
- LLM开源小工具(基于代码库快速学习/纯shell调用LLM灵活管理系统)
随着AI的各种信息的发展,LLM各种模型不断涌现,作为一名IT人员不得不向前走,不断探索学习发现新知识. 随着学习,也了解到一些对于模型的调用,从而解决一些问题,或者对已有工具或应用的重写.如下是两个 ...
- 【ASPLOS 2022】机器学习访存密集计算编译优化框架AStitch,大幅提升任务执行效率
简介: 近日,关于机器学习访存密集计算编译优化框架的论文<AStitch: Enabling A New Multi-Dimensional Optimization Space for Mem ...
- 一站式云原生智能告警运维平台——SLS新版告警发布!
简介: 本文介绍什么是云原生可观测性需求以及告警限制,介绍一站式云原生智能告警运维平台--SLS新版告警. 前言 本篇是SLS新版告警系列宣传与培训的第一篇,后续我们会推出20+系列直播与实战培训视频 ...
- 致敬 hacker |盘点内存虚拟化探索之路
简介: 内存虚拟化相比裸机,仍然存在较大差异,是当下值得关注的问题! 云与虚拟化 云计算是通过 Internet 服务的方式提供动态可伸缩资源的计算模式,经过多年的发展已成为企业 IT 技术的重 ...
- MYSQL深潜 - 剖析Performance Schema内存管理
简介: 本文主要是通过对PFS引擎的内存管理的源码的阅读,解读PFS内存分配及释放原理,深入剖析其中存在的一些问题,以及一些改进思路.本文源代码分析基于Mysql-8.0.24版本. 作者 | ...
- Jaeger插件开发及背后的思考
简介: 本文主要介绍Jaeger最新的插件化后端的接口以及开发方法,让大家能够一步步的根据文章完成一个Jaeger插件的开发.此外SLS也推出了对于Jaeger的支持,欢迎大家试用. 随着云原生 + ...
- dotnet 8 破坏性改动 在 AssemblyInformationalVersionAttribute 添加上 git 的 commit 号
我在一个 WPF 项目里面,在界面显示应用的版本号,更新到 dotnet 8 的 SDK 之后,发现我的界面布局损坏了.本质上这个破坏性改动和 WPF 没有什么关系,是 dotnet 的 SDK 或编 ...
- Vue源码-手写mustache源码
引言 在Vue中使用模板语法能够非常方便的将数据绑定到视图中,使得在开发中可以更好的聚焦到业务逻辑的开发. mustache是一个很经典且优秀的模板引擎,vue中的模板引擎也对其有参考借鉴,了解它能更 ...
- 快速部署 微软开源的 Garnet 键值数据库
快速部署 微软开源的 Garnet 键值数据库 Garnet 是 Microsoft Research 推出的一种新型远程缓存存储,其设计速度极快.可扩展且延迟低. Garnet 在单个节点内是线程可 ...