JAVA基础知识点3 (String 和 StringBuffer 以及 StringBuilder 的特点以及区别)

news2024/9/23 3:19:57

1,String 和 StringBuffer 以及 StringBuilder 的特点

(1)String的特点:String是final修饰的字符序列是不可改变的, 

        是字符串常量,一旦初始化就不可以被更改,因此是线程安全的

        因为是常量每次对其操作都会生成一个新的字符串对象,所以在多线程环境下具有线程安全            的优点,但也会导致频繁的对象创建、销毁影响程序性能

(2)StringBuffer类:

StringBuffer产生的原因:String类适用于程序中不改变字符的情况,若对字符串的每次修改都创一           个新的 String对象,显然不利于提高程序的效率。Java为了解决这个问题提供了与则String类同         级别的StringBuffer类。

StringBuffer的定义:StringBuffer类对象是一个内容可以改变的字符串,修改后仍然存放在原来的对象中。这样做是为了减少由于少量字符的插入而引起的空间分配问题。

特点:大部分方法都有synchronized 同步锁所以是线程安全的

StringBuffer类常用的方法

StringBuffer类对象的长度可以扩大或者缩小,但该类对象的容量只能扩大而不能缩小。

(3)StringBuild类:     

StringBuilder也是一个可变的字符串对象,他与StringBuffer不同之处就在于它是它其中的方法没有添加synchronized 同步锁所以是线程不安全的,基于这点,它的速度一般都比StringBuffer快。

2,String 和 StringBuffer 以及 StringBuilder的具体区别

1,可变性的区别

String被final修饰,不可变,相当于字符串常量

StringBuffer和StringBuild都是继承同一抽象类AbstractStringBuilder类,都是可变的

2,执行速度的区别

执行速度: StringBuilder > StringBuffer >String

(1)String对象是不可变的,每次对String对象的操作都会生成新的String对象,改变引用,虽然原来的String对象会被回收,但是还是造成了内存资源的浪费和JVM的线程系统开销。

所以String速度最慢,时间复杂度为O(n^2)

(2)StringBuild和StringBuffer继承同一抽象类,方法基本一样,都是可变字符串,可以直接对对象本身进行操作,不需要生成新的对象、改变对象引用,所以速度都比String快

(3)StringBuild之所以比StringBuffer快的原因,是因为StringBuffer大部分方法都加了synchronized同步锁,保证了安全的同时,速度自然会慢一点,所以,String Buffer速度快,StringBuild最快且时间复杂的为O(n),远优于O(n^2)。

3,安全性能的区别

  1. String是字符串常量,不可变,也就是线程安全
  2. StringBuffer也是线程安全的,因为大部分方法都有synchronized 同步锁
  3. StringBuild是线程不安全的,因为StringBuild是可变字符串数组,没有synchronized关键字

4,使用场景
一般情况下,String适用于少量的字符串操作的情况,StringBuilder适用于单线程下在字符缓冲区进行大量操作的情况,StringBuffer适用多线程下在字符缓冲区进行大量操作的情况,

但是StringBuffer的执行速度并不比StringBuild慢多少,而且还保证了线程安全,所以还是比较常用。

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

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

相关文章

C++必修:STL之vector的模拟实现

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 为了让我们更加深入理解vector,接下来我们将模拟实现一个简易版的vect…

龙迅#LT8918适用于TTL/LVDS转MIPIDSI/CSI应用方案,分辨率高达1080P@60HZ,可提供技术支持!

1. 描述 Lontium LT8918 是一款高性能 MIPIDSI/CSI-2 发射器,适用于移动显示面板或相机应用。 LT8918 的 TTL 输入在 SDR 或 DDR 采样下支持 24 位 RGB 和 BT656/1120 视频格式。最大输入像素时钟频率为 SDR 148.5MHz 或 DDR 74.25MHz,适用于1080P60Hz高…

PCL从理解到应用【08】 点云特征 | 法线估计 | 主曲率估计

前言 在PCL中,有多种方法和函数可以用来提取点云特征,本文介绍几何特征。 其中,几何特征主要包括法线估计和主曲率估计。 这些特征能够描述点云表面的几何形状,常用于进一步的点云处理和分析,如配准、分割和物体识别…

为什么 Kubernetes 是现代开发的必备工具

引言 在现代软件开发中,容器已经成为打包和运行应用程序的标准方式。然而,在生产环境中,管理这些运行中的容器并确保服务的高可用性和稳定性并不是一件容易的事。比如,当一个容器发生故障时,需要快速启动另一个容器来代…

C++ std::atomic和std::mutex

C11 引入了两个重要的同步机制用于多线程编程:std::atomic 和 std::mutex。它们各自适用于不同的并发控制需求,并在实现和使用上有很大的不同。 1. 目的和用途 std::atomic: 设计目的:为原子操作提供支持,保证对变量的操作&#…

Python试讲

Python试讲 导语Python简介Python及其特点如何使用Python Python与计算计算变量 导语 本次试讲内容如下:Python简介与使用,Python与基本运算 辅助教材为 《趣学Python编程》和《Python编程从入门到实践》 Python简介 Python是目前入门最简单最好学的…

FVM安装及配置

一、下载fvm 包 git:Release fvm 3.1.7 leoafarias/fvm GitHub 解压到本地文件夹,然后添加环境变量 管理员模式打开cmd,查看是否成功 fvm --version 二、安装Dart SDK 下载Dart SDK:Dart for Windows 三、安装GIT 四、指定…

python3.10安装geopandans实战笔记

1.geopandans安装所需软件库版本 python3.10 GDAL-3.4.3-cp310-cp310-win_amd64.whl【手动下载】 Fiona-1.8.21-cp310-cp310-win_amd64.whl【手动下载】 shapely-2.0.2-cp310-cp310-win_amd64.whl【手动下载】 pyproj 手动下载地址:https://download.csdn.net/down…

range和enumerate的区别

range通过索引遍历元素,属于间接访问。 enumerate直接遍历元素,效率稍高,代码简洁。range输出的是元素的索引。 enumerate输出的是元素的索引和元素。 参考:range与enumerate的区别_enumerate和range-CSDN博客

(一)springboot2.7.6集成activit5.23.0之集成引擎

集成引擎很简单。 首先是创建springboot项目然后引入相关依赖就完成了。pom.xml如下&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.…

鸿蒙应用框架开发【媒体库视频】 UI框架

媒体库视频 介绍 本示例使用Video组件展示了视频组件的基本功能&#xff0c;包括视频组件化&#xff0c;全屏化&#xff0c;窗口化&#xff0c;上下轮播视频等。 效果预览 使用说明&#xff1a; 进入首页点击播放按键&#xff1b;点击视频播放按钮&#xff0c;视频开始播放…

CTFHub技能树web——XSS——DOM反射

根据框里的内容 直接右键查看网页源代码 看到 了其闭合方式 然后去网页测试一下alert&#xff08;1&#xff09;反射 ;</script><script>alert(1)</script> 看到 确实存在 去xssaq.cn 创建一个项目 把src粘过来 在第一个输入框中 再将返回回来的url 复…

NAND行业回归盈利:AI与云存储需求驱动

市场概览 根据Yole Group于2024年6月25日发布的市场报告&#xff0c;经过五个季度的亏损之后&#xff0c;NAND闪存行业在2024年第一季度&#xff08;1Q24&#xff09;实现了盈利回归。这一转变主要得益于企业级固态硬盘&#xff08;SSD&#xff09;领域的强劲需求增长&#xf…

【教程】Python语言的地球科学常见数据——海温数据-NOAA OISST 的处理

NOAA 1/4每日最佳内插海面温度&#xff08;OISST&#xff09;是一个长期的气候数据记录&#xff0c;它将来自 不同平台&#xff08;卫星、船舶、浮标和 Argo 浮标&#xff09;的观测数据纳入一个定期的全球网格。该 数据集经过插值处理&#xff0c;以填补网格上的空白&#x…

创意无限:11个设计圈热议的UI设计灵感网站集锦

无论你是一个经验丰富的UI设计师还是一个新的UI设计师&#xff0c;拥有一些高质量、可靠的UI设计网站灵感库都能加速你的设计过程。借助灵感资源&#xff0c;您可以更快、更有效地启动该项目。与此同时&#xff0c;优秀的UI设计网站也能帮助您探索新的设计解决方案&#xff0c;…

3DsMax展开管道UV,展开圆柱体UV,展开带有拐弯部分的UV

效果 3dsmax展开管道的UV 创建管道 创建样条线 制作弯曲部分 打开样条线先的顶点&#xff0c;选择样条线的顶点&#xff0c;不选中&#xff0c;开头和结尾的顶点&#xff0c;点击圆角 &#xff0c;鼠标移动到顶点上&#xff0c;左键点击顶点然后向上拖拽。 设置样条线可渲染…

隐私安全测试:保护您的数字世界

大家好&#xff0c;我是一名_全栈_测试开发工程师&#xff0c;已经开源一套【自动化测试框架】和【测试管理平台】&#xff0c;欢迎大家关注我&#xff0c;和我一起【分享测试知识&#xff0c;交流测试技术&#xff0c;趣聊行业热点】。 一、引言 在当今数字化的时代&#xff0…

安装Docker以及安装过程中的错误解决

一、纯享版教程&#xff0b;操作截图 环境&#xff1a;centOs 7 FinalShell &#xff01;&#xff01;&#xff01;此教程针对第一次安装docker的友友&#xff0c;如果已经安装过且报错的朋友&#xff0c;请移步报错合集。 1.卸载旧版本&#xff08;无论是否安装过都建议执…

C++11深度剖析

目录 &#x1f680; 前言&#xff1a;C11简介 一&#xff1a; &#x1f525; 统一的列表初始化&#x1f4ab; 2.1 &#xff5b;&#xff5d;初始化 二&#xff1a; &#x1f525; std::initializer_list &#x1f4ab; 2.1 std::initializer_list是什么类型&#x1f4ab; 2.2 s…

【LLM】-14-搭建问答系统

核心流程说明&#xff1a; 对用户的输入进行检验&#xff0c;验证其是否可以通过审核 API 的标准。若输入顺利通过审核&#xff0c;我们将进一步对产品目录进行搜索。若产品搜索成功&#xff0c;我们将继续寻找相关的产品信息。我们使用模型针对用户的问题进行回答。最后&…