`

String,StringBuffer,StringBulider的区别 「转」

 
阅读更多
String是固定长度的字符串,如果要发生变化必须重新生成新的实例;
String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变的情况下。而在某些特别情况下, String 对象的字符串拼接其实是被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成中, String 效率是远要比StringBuffer 快的:
String S1 = “This is only a” + “ simple” + “ test”;
StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).append(“ test”);
你会很惊讶的发现,生成 String S1 对象的速度简直太快了,而这个时候 StringBuffer 居然速度上根本一点都不占优势。其实这是 JVM 的一个把戏,在 JVM 眼里,这个
String S1 = “This is only a” + “ simple” + “test”; 其实就是:
String S1 = “This is only a simple test”; 所以当然不需要太多的时间了。但大家这里要注意的是,如果你的字符串是来自另外的 String 对象的话,速度就没那么快了,譬如:
String S2 = “This is only a”;
String S3 = “ simple”;
String S4 = “ test”;
String S1 = S2 +S3 + S4;
这时候 JVM 会规规矩矩的按照原来的方式去做,在大部分情况下 StringBuffer > String
StringBuffer
Java.lang.StringBuffer线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。
StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4, "le") 将更改字符串缓冲区,使之包含“starlet”。
java.lang.StringBuilder一个可变的字符序列是5.0新增的。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer 要快。两者的方法基本相同。
在Java语言体系中,用于声明变量的基本数据类型只有8种:boolean,char,byte,short,int,long,float,double。

与C/C++语言不同的是java中并没有把字符串作为一种基本的数据类型,而是在java.lang包中提供了处理字符串的类String,该类用于处理“不可变”的字符串;与之对应的还有,StringBuffer类用于处理“可变的”字符串。

注意:这两种类都被声明为final型,因此不可以被当做父类继承使用。

一、String类

由类String所创建的对象在创建之后是不可以更改的,被视为常量。

举例说明:

subString是String类中重要的处理字符串的方法

String str = "Hello world!";

Str = str.subString(6);

在上述语句中,str.subString(6);重新创建了一个字符串String对象,然后把这个对象赋值给str。





二、StringBuffer类

StringBuffer类是字符串缓冲区存储类,创建是可以更改长度的字符串对象,该字符串被视为常量,可以调用类方法改变字符串的长度和内容。

实现机理:创建对象时开辟一个缓冲区存放字符串序列,可以向字符串追加、插入操等作。在超过缓存区的容量时,java会自动扩大缓冲区的容量,保证操作的安全性。





三、StringBuilder类

StringBuilder类使用方法和StringBuffer类类似。

区别:StringBuffer类适用于多线程方法,StringBuilder类适用于单线程操作。StringBuilder对象的执行效率比StringBuffer对象要高。

StringBuilder是J2SE   5.0才新增的类,在J2SE   5.0之前的版本若有相同的需求,则使用java.lang.StringBuffer。事实上,StringBuilder被设计为与StringBuffer具有相同的操作接口。在单机非多线程(Multithread)的情况下使用StringBuilder会有较好的效率,因为StringBuilder没有处理同步(Synchronized)问题。StringBuffer则会处理同步问题,如果StringBuilder会在多线程下被操作,则要改用StringBuffer,让对象自行管理同步问题。
分享到:
评论

相关推荐

    String,StringBuffer,StringBuilder区别

    总结来说,理解Java中String、StringBuffer和StringBuilder的区别,并合理选择使用哪个类,对于编写高性能Java程序是至关重要的。在进行性能敏感的操作时,选择合适的字符串处理类可以大幅提升程序的执行效率。同时...

    String、StringBuilder、StringBuffer的区别

    String、StringBuilder、StringBuffer的区别 在 Java 中,String、StringBuilder 和 StringBuffer 三者都是字符串处理类,但是它们之间存在着本质的区别。本文将从执行速度、线程安全性、字符串处理方式等方面对这...

    常见病虫识别样本-数据集

    来自2021年软件杯A4赛道的数据集,同时我们自己在网上搜集到了对应害虫的幼虫形态,总共15种害虫,同时对每一种害虫都做了标注,存放在Annotations文件里面。 注意:数据分为图片和Xml文件,xml文件里面是框框的坐标,数据有点少,大家也可以自行添加一点,有几个XML文件是空的。

    餐馆点餐管理系统-数据库课程设计-MySQL

    《餐馆点餐管理系统——基于Java和MySQL的课程设计解析》 在信息技术日益发达的今天,餐饮行业的数字化管理已经成为一种趋势。本次课程设计的主题是“餐馆点餐管理系统”,它结合了编程语言Java和数据库管理系统MySQL,旨在帮助初学者理解如何构建一个实际的、具有基本功能的餐饮管理软件。下面,我们将深入探讨这个系统的实现细节及其所涉及的关键知识点。 我们要关注的是数据库设计。在“res_db.sql”文件中,我们可以看到数据库的结构,可能包括菜品表、订单表、顾客信息表等。在MySQL中,我们需要创建这些表格并定义相应的字段,如菜品ID、名称、价格、库存等。此外,还要设置主键、外键来保证数据的一致性和完整性。例如,菜品ID作为主键,确保每个菜品的唯一性;订单表中的顾客ID和菜品ID则作为外键,与顾客信息表和菜品表关联,形成数据间的联系。 接下来,我们来看Java部分。在这个系统中,Java主要负责前端界面的展示和后端逻辑的处理。使用Java Swing或JavaFX库可以创建用户友好的图形用户界面(GUI),让顾客能够方便地浏览菜单、下单。同时,Java还负责与MySQL数据库进行交互,通过JDBC(Java Database Connectivity)API实现数据的增删查改操作。在程序中,我们需要编写SQL语句,比如INSERT用于添加新的菜品信息,SELECT用于查询所有菜品,UPDATE用于更新菜品的价格,DELETE用于删除不再提供的菜品。 在系统设计中,我们还需要考虑一些关键功能的实现。例如,“新增菜品和价格”的功能,需要用户输入菜品信息,然后通过Java程序将这些信息存储到数据库中。在显示所有菜品的功能上,程序需要从数据库获取所有菜品数据,然后在界面上动态生成列表或者表格展示。同时,为了提高用户体验,可能还需要实现搜索和排序功能,允许用户根据菜品名称或价格进行筛选。 另外,安全性也是系统设计的重要一环。在连接数据库时,要避免SQL注入攻击,可以通过预编译的PreparedStatement对象来执行SQL命令。对于用户输入的数据,需要进行验证和过滤,防止非法字符和异常值。 这个“餐馆点餐管理系统”项目涵盖了Java编程、数据库设计与管理、用户界面设计等多个方面,是一个很好的学习实践平台。通过这个项目,初学者不仅可以提升编程技能,还能对数据库管理和软件工程有更深入的理解。在实际开发过程中,还会遇到调试、测试、优化等挑战,这些都是成长为专业开发者不可或缺的经验积累

    校园服务平台系统 2025免费毕设附带论文 SpringBoot+Vue.js

    2025免费毕设附带论文 SpringBoot+Vue.js 启动教程: https://www.bilibili.com/video/BV11ktveuE2d/?share_source=copy_web 二开教程:https://www.bilibili.com/video/BV18i421i7Dx/?share_source=copy_web 讲解视频:https://www.bilibili.com/video/BV1Tb421n72S/?share_source=copy_web

    BlueCoreTM3-Flash:蓝牙2.4GHz系统的单芯片射频与基带IC集成电路解决方案 蓝牙技术

    内容概要:本文详细介绍了BlueCoreTM3-Flash,一款专为蓝牙2.4GHz系统设计的单芯片射频和基带IC。文章首先概述了BlueCoreTM3-Flash的基本特性,包括高集成度、高速处理能力和大容量内存。接着深入探讨了其底层驱动程序和固件代码的设计,展示了如何通过寄存器操作、中断处理和数据处理来实现高效的蓝牙通信和数据传输。最后,文章列举了BlueCoreTM3-Flash在智能耳机、智能手表等多种蓝牙设备中的实际应用场景,强调了其在物联网和智能设备领域的广泛应用前景。 适合人群:对蓝牙技术和集成电路感兴趣的电子工程师、硬件开发者和技术爱好者。 使用场景及目标:①了解BlueCoreTM3-Flash的技术特性和优势;②掌握其底层驱动程序和固件代码的工作原理;③探索其在各类蓝牙设备中的具体应用。 其他说明:本文基于CSR公司的官方资料和技术文档,旨在帮助读者全面理解BlueCoreTM3-Flash的功能及其在蓝牙设备中的重要地位。

    基于COMSOL欧拉-欧拉模型的气固流化床仿真技术解析

    内容概要:本文详细介绍了欧拉-欧拉模型在气固流化床仿真中的应用,重点探讨了该模型如何通过COMSOL仿真软件捕捉气固两相流的复杂交互行为。文章解释了欧拉-欧拉模型的基本原理,即把不同相视为连续介质,以便更精确地模拟和分析各相间的交互作用。文中还强调了COMSOL的强大计算能力和丰富的物理模型库,使得复杂多相流问题得以高效解决。此外,文章讨论了该模型在化工生产中的具体应用场景,如作为反应器或催化剂载体的气固流化床的设计和优化。 适合人群:从事化学工程、流体力学及相关领域的研究人员和技术人员。 使用场景及目标:适用于需要深入了解气固流化床内部流动状态和反应过程的研究项目,旨在优化设备设计和提高生产效率。 其他说明:本文不仅提供了理论背景,还涉及实际操作步骤,包括建模、设定边界条件以及仿真计算,有助于读者全面掌握相关技术和方法。

    疫情防控专题网站系统 2025免费毕设附带论文 SpringBoot+Vue.js

    2025免费毕设附带论文 SpringBoot+Vue.js 启动教程: https://www.bilibili.com/video/BV11ktveuE2d/?share_source=copy_web 二开教程:https://www.bilibili.com/video/BV18i421i7Dx/?share_source=copy_web 讲解视频:https://www.bilibili.com/video/BV1Tb421n72S/?share_source=copy_web

    基于BERT、CRF和BiLSTM的知识图谱医生推荐系统的Python代码及文档与数据集

    毕业设计基于BERT+CRF+BiLSTM知识图谱实现的医生推荐系统,提供python源码、文档说明及数据集。本项目适合计算机相关专业的学生用于毕设或项目实战练习,也可作为课程设计或期末大作业使用。项目经过严格调试,确保可以运行。。内容来源于网络分享,如有侵权请联系我删除。

    宠物商城网站 2025免费毕设附带论文 SpringBoot+Vue.js

    2025免费毕设附带论文 SpringBoot+Vue.js 启动教程: https://www.bilibili.com/video/BV11ktveuE2d/?share_source=copy_web 二开教程:https://www.bilibili.com/video/BV18i421i7Dx/?share_source=copy_web 讲解视频:https://www.bilibili.com/video/BV1Tb421n72S/?share_source=copy_web

    bugreport-2025-05-19-222057.zip

    bugreport-2025-05-19-222057.zip

    基于ADRC控制的Matlab Simulink半车主动悬架建模及其与PID控制的性能对比 ADRC控制 基于ADRC控制的Matlab Simulink半车主动悬架建模:效果对比与输出分析

    内容概要:本文详细探讨了基于ADRC(自抗扰控制)的Matlab Simulink半车主动悬架建模方法及其控制效果。文章首先介绍了半车主动悬架模型的重要性,然后深入讲解了ADRC控制的基本原理及其在悬架系统中的应用。ADRC控制通过自我抗扰实现了对系统的精确控制,尤其适用于非线性、时变和不确定的系统。文中还展示了ADRC控制在车身加速度、悬架动挠度和轮胎动变形等方面的优化表现,并将其与传统的PID控制进行对比,结果显示ADRC控制在复杂路况下表现出显著优势。最后,文章提供了具体的Matlab/Simulink建模和仿真实验步骤,验证了ADRC控制的有效性。 适合人群:汽车工程专业学生、从事车辆控制系统研究的研究人员和技术人员。 使用场景及目标:①理解和掌握ADRC控制在半车主动悬架中的应用;②评估ADRC控制相对于传统PID控制的优势;③利用Matlab/Simulink进行悬架系统建模和仿真。 其他说明:本文不仅提供了理论分析,还包括实际的建模和仿真实例,有助于读者全面理解ADRC控制的实际应用。

    《基于安卓平台的单词学习助手应用开发》

    在安卓开发领域,通过 Android Studio 构建实用的“单词本”应用是一个极具代表性的项目。该应用主要面向学生、语言学习者以及其他希望提升词汇量的用户,旨在帮助他们高效学习和记忆英语单词。 安卓移动开发专注于为安卓设备(如智能手机和平板电脑)开发应用程序。Android Studio 作为谷歌官方推荐的集成开发环境(IDE),提供了代码编辑器、调试器、构建系统和模拟器等强大工具,极大地提升了开发效率。 在“单词本”项目中,Android Studio 的直观界面和丰富功能得到了充分体现。开发者可以利用 XML 设计用户界面,同时使用 Java 或 Kotlin 编写业务逻辑,实现如添加、删除、复习单词等功能。 应用的核心功能包括: 数据存储:采用 SQLite 数据库存储单词及其含义。SQLite 是轻量级的数据库管理系统,可直接嵌入应用中,无需服务器支持。 用户界面:通过多个活动(Activity)展示不同功能,例如主界面显示单词列表,详情页展示单词详细信息,复习界面用于测试用户记忆。 UI 设计:使用 XML 布局文件定义控件布局和样式。Android Studio 的布局编辑器还支持可视化设计,方便开发者操作。 事件处理:通过为按钮等控件设置监听器,响应用户操作(如点击事件),实现添加、删除单词等功能。 通知与提醒:利用安卓的通知 API 和 AlarmManager 服务,提醒用户定期复习单词。 测试与调试:借助 Android Studio 的调试工具,开发者可以进行单元测试和集成测试,设置断点、查看变量值、跟踪代码执行流程,从而发现并修复问题。 开发过程中,Android 模拟器可用于测试应用。模拟器能够模拟不同设备型号和操作系统版本,帮助开发者评估应用的兼容性和性能。 此外,“报告.doc”文件通常详细记录了项目的整体情况,包括目标、设计思路、实现过程

    全自动化瓶盖封装机设备及其控制系统——基于西门子1200PLC与TP900触摸屏的应用

    内容概要:本文介绍了全自动化瓶盖封装机设备的构成和技术应用,特别是博图15.1技术、西门子1200PLC和TP900触摸屏程序的作用。设备由机架、驱动系统、夹具、封装头等部分组成,利用传感器和编码器实现精准封装。博图15.1实现了设备的实时监控、故障诊断和自动报警。西门子1200PLC负责精确控制并与其他设备通信,而TP900触摸屏提供了便捷的操作界面。此外,还提供了视频教程、CAD图纸、PDF文档和IO表等辅助材料,帮助用户理解和操作设备。 适合人群:从事工业自动化设备研发、制造、维护的技术人员,尤其是对PLC编程和人机界面感兴趣的工程师。 使用场景及目标:适用于需要详细了解全自动化瓶盖封装机设备的工作原理和技术细节的专业人士,旨在提高设备的运行效率和稳定性,便于操作和维护。 其他说明:文中提供的多种辅助资料有助于深入理解设备的功能和操作方法,对于实际应用有重要指导意义。

    Delphi 12.3控件之Mitov Runtime version 8-0-0-142 source.rar

    Delphi 12.3控件之Mitov Runtime version 8_0_0_142 source.rar

    基于Simulink仿真的FOC电流环PI参数自整定模型:电机控制系统优化与智能化升级 电机控制 FOC电流环PI参数自整定Simulink仿真模型

    内容概要:本文详细介绍了基于Simulink仿真的FOC电流环PI参数自整定模型及其应用。首先阐述了FOC电流环PI参数自整定的基本原理,即通过传感器输出的角度和速度信息,利用PI控制器实现对电流的精确控制,并根据电机实际运行状态自动调整比例系数和积分系数。接着,重点介绍了该模型的特点,如采用有感FOC控制最小系统、支持无传感器控制升级、标幺值系统便于参数调整、离散式步长仿真确保准确性、模块化结构利于二次开发、所有参数随用随改以及电流环PI参数自动整定。最后,讨论了该模型在电机控制策略研究、不同负载特性的测试以及教育领域的应用价值。 适合人群:从事电机控制技术研发的专业人士、高校师生及相关研究人员。 使用场景及目标:①研究和测试各种电机控制策略;②模拟不同负载特性,评估电机性能;③帮助学生理解和掌握电机控制原理及FOC控制技术。 其他说明:文中提及的PI参数自整定原理参考了知乎的相关文章,提供了进一步的学习资源。

    毕业设计-智慧农场小程序 1.8.9-整站商业源码.zip

    毕业设计-智慧农场小程序 1.8.9-整站商业源码.zip

    爱国评论数据生成及可视化

    生成了评论数据集,根据评论绘制了词云图和情感分析柱状图。

    自创mrt搭建图纸,狙击枪,很帅,真的很帅,需要备课

    韩端mrt,机器人搭建图,这个课常规都不好上,所以建议还是及时换教具,狙击枪使用起来会有bug,如果绳子缠着了,自行松一下就行

    用面对对象求圆和长方形的面积周长.zip

    用面对对象求圆和长方形的面积周长.zip

Global site tag (gtag.js) - Google Analytics