String、StringBuffer和StringBuilder

关于String,StringBuilder和StringBuffer的区别 先说StringBuilder和StringBuffer的区别: StringBuilder是JDK1.5引入的,与StringBuffer几乎完全一样,唯一区别仅在于StringBuilder没有实现原StringBuffer的线程安全功能,故性能有所提高,以供重视性能而安全要求不高的场合选用。 String与StringBuilder和StringBuffer的区别: ... 阅读详情

String是final的系统内置类型,不可被继承。String是不可变的对象(长度固定、值不可变)。因此在每次对String类型进行改变的时候其实都等同于生成了一个新的String对象,然后将指针指向新的String对象,所以经常改变内容的字符串最好不要用String,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,JVM的GC就会开始工作,那速度是一定会相当慢的。举例:
String str = "abc";
for (int i = 0 ; i < 10000; i++) {  // for 模拟程序的多次调用 
         str += Integer.toString(i);
}

如果是这样的话,到这个for循环完毕后,如果内存中的对象没有被GC清理掉的话,内存中一共有上万个String对象了,惊人的数目。而如果是使用StringBuffer类则结果就不一样了,每次结果都会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在一般情况下我们推荐使用 StringBuffer,特别是字符串对象经常改变的情况下。

事实上,StringBuilder被设计为与StringBuffer具有相同的操作接口。唯一区别是StringBuilder不是线程安全的(没有进行synchronized,不执行同步),而StringBuffer是线程安全的(进行synchronized)所以,在线程安全不是问题的情况下(如单线程、线程局部使用或方法内部的临时变量时)完全可以使用StringBuilder代替StringBuffer,其性能比StringBuffer高。如果在多线程下被操作,则要改用StringBuffer,让对象自行管理同步问题。

StringBuffer上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append方法始终将这些字符添加到缓冲区的末端;而insert方法可以将字符插入指定的位置,如果该位置以后有字符,则将所有的字符往后移。

例如,如果z引用一个当前内容是"start"的字符串缓冲区对象,则此方法调用z.append("le")会使字符串缓冲区包含"startle",而 z.insert(4, "le")将更改字符串缓冲区,使之包含"starlet"。通常,如果sb引用 StringBuilder 的一个实例,则sb.append(x)和sb.insert(sb.length(), x)具有相同的效果。

摘录的网上一段为什么要引入StringBuilder的文字:为什么会出现那么多比较String和StringBuffer的文章?原因在于当改变字符串内容时,采用StringBuffer能获得更好的性能。既然是为了获得更好的性能,那么采用StringBuffer能够获得最好的性能吗?答案是NO!为什么?如果你读过《Think in Java》,而且对里面描述HashTable和HashMap区别的那部分章节比较熟悉的话,你一定也明白了原因所在。对,就是支持线程同步保证线程安全而导致性能下降的问题。HashTable是线程安全的,很多方法都是synchronized方法,而HashMap不是线程安全的,但其在单线程程序中的性能比HashTable要高。StringBuffer和StringBuilder类的区别也在于此,新引入的StringBuilder类不是线程安全的,但其在单线程中的性能比StringBuffer高。

TortoiseSVN的安装与使用 TortoiseSVN的安装与应用1、安装1.1、下载TortoiseSVN    点击下载TortoiseSvn1.2、下载汉化包。上面的页面中,找到Chinese, simplified汉化包,点击32位或者64位的Setup,下载汉化包。1.3、安装TortoiseSVN。在选择安装路径页面时要记得勾选“command line client tools”,默认不是勾选的。这里不勾选的话在I... 阅读详情

相关推荐

PCRNet: Point Cloud Registration Network using PointNet Encoding

PCRNet算是在ModelNet40这种object-centric数据集上用deep-learning做配准最好入手的一篇文章了,整体架构涉及简洁明了,一句话描述就是简单粗暴,话不多说,直接上网络架构图: Work Flow: 首先对输入source (N×3N \times 3N×3)与template (M×3M \times 3M×3)进行PointNet操作,即MLP + max-pooling后,分别得到描述各自点云的维度为1024的global feature vector:Φ(PS).

dloading7的博客 1647

Java基础篇——String类、StringBuilder类和StringBuffer类比较

String类介绍:https://blog.youkuaiyun.com/Flychuer/article/details/119843610?spm=1001.2014.3001.5501 StringBuilder类和StringBuffer类介绍:https://blog.youkuaiyun.com/Flychuer/article/details/119862249?spm=1001.2014.3001.5501 相同点: 都是final修饰的类,都不可以被继承。 都是操作字符串的类,可对字符串查找、拼接、切.

Flychuer的专栏 331

嵌入式Linux Qt/QML开发实战:从Buildroot配置到应用部署

本文详细介绍了嵌入式Linux Qt/QML开发全流程,从Buildroot系统配置、交叉编译工具链搭建到应用部署与调试。以RK3506开发板为例,提供实战指南,帮助开发者高效完成嵌入式应用开发,解决常见环境配置与性能优化问题。

m2n3o4p5的博客 224

String,StringBuffer,StringBuilder区别与联系及其使用

String,StringBuffer,StringBuilder区别与联系及其使用

don't speak show me code 2576

钢铁雄心4存档修改全攻略:从基础设置到高级玩法(附国家代码表)

本文详细解析《钢铁雄心4》存档修改技巧,从基础设置到高级玩法全覆盖。包括存档文件位置、格式转换、国家实力调整、国际关系修改等实用内容,并附赠国家代码表。掌握存档修改技能,解锁游戏全部潜力,实现精细参数控制,超越控制台指令的局限。

weixin_29233857的博客 1432

【软件使用】Calibre部分提参的实战技巧与常见问题解析

本文深入解析Calibre部分提参(Partial Extraction)的实战技巧与常见问题,涵盖PEX、hcell和xcell文件的高级应用。通过实际案例展示如何提升电路仿真效率,解决时钟信号失真等复杂问题,并提供版图设计中的防坑指南,助力芯片设计工程师优化工作流程。

weixin_28717431的博客 162

详解字符串的不可变性、StringBuilder和StringBuffer(区别,使用方法,含源码讲解)

字符串的不可变性 | 字符串拼接造成的性能损耗 | StringBuffer源码讲解 | StringBuffer和StringBuilder的常用方法 | StringBuffer和StringBuilder的区别 | StringBuffer和StringBuilder的相同

luming的博客 5352

NX二次开发(python)-坯料尺寸(一)

一般在产品制造过程中,往往要判断一个模型在出模方向上的最小包容盒尺寸,在NX中可以用坯料尺寸命令实现,当然也有相应的代码实现,这或许可以帮助我们实现一些产品的坯料尺寸批量输出,节省人力。

dasfanfan的博客 816

String、StringBuilder和StringBuffer

String 源码如下: /** The value is used for character storage. */ private final char value[]; /** The offset is the first index of the storage that is used. */ private final int offset; /** The count is the number of characters in the String. */ private..

weixin_43636782的博客 125

Lammps纳米压痕接触面积—Matlab接触面积计算(两种方法)

Lammps纳米压痕接触面积计算

Rockyoung 5448

Windows2008使用-解决漏洞-CVE-2010-2730

随着硬件的升级,操作系统也逐渐进行了版本更新。目前阶段,Windows2016Server、Windows2022Server逐渐成为了以Windows系列的服务器平台系统。对于有些应用而言,由于其业务的固定,可能仍只能运行在Windows2008Server或者Windows2012Server上。有时候我们为安全需要,需要将相关的操作系统涉及的漏洞做修复。最近碰到在一个Windows2008R2 的操作系统漏洞CVE-2010-2730,一顿操作,终于找到了合适的方案,这里分享给大家。

mystonelxj的博客 2314

StringBuilder会替代StringBuffer吗?看看ChatGPT是怎么回答的

大家知道String拼接的性能低,jdk中有一个StringBuffer可以提高性能,当时大学课堂上我记得老师也给我们讲过,当然jdk早期版本中只有StringBuffer,但后面的版本中新出来了StringBuilder,现在慢慢在被大家使用起来了。如果写的是非web代码那就更能使用到StringBuilder,StringBuilder会越来越多的出现在我们的视线中。如果你注意点可以发现,阿里新的开发手册中字符串的连接建议我们使用的是StringBuilder。Bing ChatGPT回答。

Hanko的专栏 305

【ATC/DTC方法第一期】经典平均/昼夜温度周期ATC/DTC方法介绍(含Python代码实现)

【ATC/DTC方法第一期】经典平均/昼夜温度周期ATC/DTC方法介绍(含Python代码实现)

WW、forever的博客 484

String和Stringbuffer和Stringbuilder的区别

JAVA 中String和Stringbuffer和Stringbuilder的区别** java 中String和StringBuffer与StringBuilder的区别及使用方法 String 类  String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间。 String a = “a”; //假设a指向地址0x0001 a = “b”;//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不

bxl1998720的博客 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

String和StringBuffer及StringBuilder的区别

String和StringBuffer及StringBuilder的区别 1、String类的内容是不可改变的。能改变的只是其内存指向。 2、String对象不可修改指的是对象本身不可修改,而不是引用不可修改。 3、StringBuffer类的对象内容是可以修改的。 4、String可以直接通过赋值的方式实现对象实例化,而StringBuffer只能通过构造方法的方式对象实例化。 5、StringBuffer在处理字符串的时候,不会生成新的对象。从内存这个角度来说,StringBuffer要比String更

qq_57181249的博客 5813

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

String、StringBuilder 和 StringBuffer 详解

本篇文章主要描述了 String 、StringBuilder 和 StringBuffer 的主要特性,String、StringBuilder 和 StringBuffer 的底层构造是怎样的,StringBuilder 和 StringBuffer 的扩容特性等。

zrulin的博客 4422

Stringbuilder和String的区别,一文弄清String、StringBuilder、StringBuffer

String、StringBuilder、StringBuffer对于初学者来说并不是很了解他们有什么区别,String和StringBuilder、strnigbuffer各有各的优点,希望这篇文章能够帮助初学者理解他们之间的优劣以及关系

getture的博客 1564

String,StringBuffer和StringBuilder的区别及StringBuffer和StringBuilder的扩容原理

String字符串类型String是我们开发中最常使用的引用类型,我们用双引号"..."引起来的内容是字符串。1.String 不可变性​ String类型的字符串值是不可改变的,String底层是final修饰的char[],String也是一个final类,内部声明的变量也是final类型的所以String类型的值不可变,只会重新生成新的对象,指针指向新的地址,修改String字符串的值实际上是重新创建一个新的存储空间来存值,然后指针重新指向新的存储空间。

m0_65334245的博客 1071

String和StringBuffer和StringBuilder的区别

1:StringBuffer、StringBuilder和String一样,也用来代表字符串。String类是不可变类,任何对String的改变都 会引发新的String对象的生成;StringBuffer则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。 2: HashTable是线程安全的,很多方法都是synchronized方法,而HashMap不是线程安全的,但其在单线程程序中的性能比HashTable要高。 3: StringBuffer和StringBuilder类的区..

Java后端技术栈 1万+

String、StringBuilder和StringBuffer的区别

在实际开发中需要对字符串进行频繁的修改的,不使用String类;若要考虑线程安全的时候使用StringBuffer类;若不需要考虑线程安全,选择使用StringBuilder类。

m0_68903702的博客 1253

简述String、StringBuilder和StringBuffer的区别

三个都是java平台提供的字符串,都是可以用于存储和操作字符串。以下是他们的区别: 1、String是只读字符串,底层是被final修饰了,意味着String引用的字符串内容是不能被改变的; String str = “abc”; str = “bcd”; 实际上,这时候的str并不说是之前的str,由于第二步操作是直接创建新的对象然后进行赋值的,此时两个str所指向的地址是不同的; ...

qq_32003379的博客 4758

String、StringBuffer和StringBuilder区别

String、StringBuffer和StringBuilder的区别: String String类是不可变类,即一旦一个String对象被创建以后,包含在这个对象中的字符序列是不可改变的,直至这个对象被销毁。 这个是String类的解释,之前看到这个情况,不能理解上述的解释,如下 String a = "123"; a = "456"; // 打印出来的a为456 System.out.println(a) 看到这里,不明白了,这不是明明已经对他进行修改了吗?为什么还说他是一个不可变类呢? 经过学习

DDDDeng_的博客 7304

String、StringBuffer和StringBuilder的区别

String、StringBuffer和StringBuilder 我们为什么要引入StringBuffer和StringBuilder? String的局限性: String不是基本数据类型,在创建的字符串属于对象,一种是new()创建对象,一种是创建String类对象的引用变量。 但是,String是被final修饰的,它的值是不可改变的,这导致每次对String字符串进行操作,都会生成新的String对象,然后再将指针指向新的String对象,这样不仅导致效率低下,还会浪费内存空间。 我们来看下St

qq_49180959的博客 441

String、StringBuilder 和 StringBuffer 的区别

String、StringBuilder 和 StringBuffer,SpringBoot,SpirngCloudAlibaba,SpringBoot+Vue

QQ903275718的博客 1108

理解String、StringBuffer和StringBuilder类

String、StringBuffer和StringBuilder类

weixin_61898502的博客 1618

String和StringBuilder和StringBuffer

本文对比分析Java中String、StringBuilder和StringBuffer的特性与适用场景。String具有不可变性,线程安全但性能较差;StringBuilder线程不安全但性能最优,适合单线程拼接;StringBuffer线程安全但性能稍逊。源码层面,String在JDK9+改用byte[]存储以节省空间,字符串拼接通过编译器优化为StringBuilder操作。StringBuilder/StringBuffer基于可扩容char[]实现,后者通过synchronized保证线程安全。

NingMaoKing的博客 1024
上一篇: 多线程为什么有同步的概念
下一篇: string机制1
ForWayfarer
博客等级 码龄20年 60粉丝 96原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值