String,StringBuffer,StringBuild 区别

本文详细解析了Java中的三种字符串类型:String、StringBuffer和StringBuilder的区别。重点介绍了它们在内存使用、性能表现以及线程安全性方面的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

String 字符串常量
StringBuffer 字符串变量(线程安全)
StringBuilder 字符串变量(非线程安全)
简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在
于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实
都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,
所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对
系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就
会开始工作,那速度是一定会相当慢的。
而如果是使用 StringBuffer 类则结果就不一样了,每次结果都会
对 StringBuffer 对象本身进行操作,而不是生成新的对象,再改变对象引用。
所以在一般情况下我们推荐使用 StringBuffer ,特别是字符串对象经常改变
的情况下。而在某些特别情况下, String 对象的字符串拼接其实是
被 JVM 解释成了 StringBuffer 对象的拼接,所以这些时候 String 对象的
速度并不会比 StringBuffer 对象慢,而特别是以下的字符串对象生成
19
中, String 效率是远要比 StringBuffer 快的: String S1 = “This is only a” + “ simple” + “ test”; StringBuffer Sb = new StringBuilder(“This is only a”).append(“ simple”).app end(“ test”); 你会很惊讶的发现,生成 StringS1 对象的速度简直太快了,而这个时
候 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 方法,可重载这些方法,以
20
接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然
后将该字符串的字符追加或插入到字符串缓冲区中。 append 方法始终将这
些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
例如,如果 z 引用一个当前内容是“start”的字符串缓冲区对象,则此方法调
用 z.append("le") 会使字符串缓冲区包含“startle”,而 z.insert(4,"le") 将更
改字符串缓冲区,使之包含“starlet”。
在大部分情况下 StringBuilder>StringBufferjava.lang.StringBuilder
java.lang.StringBuilder 一个可变的字符序列是 5.0 新增的。此类提供一个
与 StringBuffer 兼容的 API,但不保证同步。该类被设计用
作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候
(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,
它比 StringBuffer 要快。两者的方法基本相同。
内容概要:本文档详细介绍了基于MATLAB实现多目标差分进化(MODE)算法进行无人机三维路径规划的项目实例。项目旨在提升无人机在复杂三维环境中路径规划的精度、实时性、多目标协调处理能力、障碍物避让能力和路径平滑性。通过引入多目标差分进化算法,项目解决了传统路径规划算法在动态环境和多目标优化中的不足,实现了路径长度、飞行安全距离、能耗等多个目标的协调优化。文档涵盖了环境建模、路径编码、多目标优化策略、障碍物检测与避让、路径平滑处理等关键技术模块,并提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,对无人机路径规划和多目标优化算法感兴趣的科研人员、工程师和研究生。 使用场景及目标:①适用于无人机在军事侦察、环境监测、灾害救援、物流运输、城市管理等领域的三维路径规划;②通过多目标差分进化算法,优化路径长度、飞行安全距离、能耗等多目标,提升无人机任务执行效率和安全性;③解决动态环境变化、实时路径调整和复杂障碍物避让等问题。 其他说明:项目采用模块化设计,便于集成不同的优化目标和动态环境因素,支持后续算法升级与功能扩展。通过系统实现和仿真实验验证,项目不仅提升了理论研究的实用价值,还为无人机智能自主飞行提供了技术基础。文档提供了详细的代码示例,有助于读者深入理解和实践该项目。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值