首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
String、StringBuffer、Stringbuil
[问答题]
String、StringBuffer、Stringbuilder有什么区别
添加笔记
求解答(0)
邀请回答
收藏(406)
分享
纠错
163个回答
添加回答
194
牛客843146024号
最后一句话是错了吧
发表于 2022-03-18 12:26:57
回复(1)
111
Deser
StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
String:不可变字符序列,效率低,但是复用率高。
StringBuffer:可变字符序列、效率较高(增删)、线程安全
StringBuilder:可变字符序列、效率最高、线程不安全
发表于 2022-03-26 10:20:07
回复(4)
30
木一猿猴
三者都是引用数据类型,都是对字符串进行相关操作的类。三者的区别主要有以下几点:1、对象创建的区别:String可以直接字符串赋值创建,或者new String()创建,前者会判断字符串常量池中是否存在,如果存在直接引用,不存在则创建一个在字符串常量池中,后者会在堆内存中new一个对象,同时如果字符串常量池中没有值相同的,也会给字符串常量池创建一个。StringBuilder和Stringbuffer则都abstractStringBuilder的子类,需要在堆内存中new一个。2、值是否可变的区别:String由于final修饰的原因,其值是不可改变的,若要改变,只能采用引用改变来达到值改变的效果。StringBuilder和StringBuffer都可以实现对值的修改,常用方法有append()方法等。3、数据拼接的区别:String可以直接用字符串拼接相加实现,这种情况实在编译的时候就进行了。而倘若是两个变量的相加(String +),那其本质是用到了StringBuilder的append()方法,而如果不出现频繁建stringBuilder对象的情况下,其实速度还是很快的。而StringBuilder由于是线程不安全的,不用考虑锁的开销,其速度也是很快的,比StringBuffer要快(其是线程安全的)。4、线程安全的区别:String是不可变类,所以是线程安全的。StringBuilder线程不安全,StringBuffer线程安全。
编辑于 2022-05-18 17:42:43
回复(0)
27
周晓琪88啦
答案最后一句错了,多线程高并发情况下应该使用线程安全的StringBuffer类!
发表于 2022-04-16 10:57:45
回复(2)
13
2en
string内的char数组被final修饰创建的对象都是不可变的,而buffer和builder封装的字符串对象是可以被改变的,string builder是线程不安全的,stringbuffer是线程安全的,因为buffer中的方法都有synchronized关键字,因此builder的效率高过buffer,所以在多线程共享的字符串对象应该使用buffer,其他环境下使用builder
发表于 2022-05-22 15:45:48
回复(0)
8
Chaos1874
String是final修饰不可被继承不可变,即时修改也是新建一个变量,String通过不变的特性实现了线程之间的可见性,一定条件下可以保证线程安全。StringBuffer和StringBuilder对象是可变的。StringBuffer实现了Synchronize封装使得它线程安全,而StringBuilder是线程不安全的。所以从运行速度来说,StringBuilder>StringBuffer>String
发表于 2022-05-11 11:33:26
回复(0)
6
阐禅
线程安全:String和StringBuffer是线程安全的,StringBuilder是线程不安全的。 性能:StringBuilder>StringBuffer>String 可变性:String不可变,其他的两个可变。
发表于 2022-05-07 14:40:05
回复(0)
5
yiling209
String是不可变的(final修饰),创建以后的值是不可以修改的,当修改以后,重新new了一个String, 从而效率比较低,占用大量的内存空间 而StringBuilder可以看做是一个容器,创建以后里面的内容是可以修改的,提高了效率, 主要应用于字符串拼接、反转等,场景多为单线程操作字符串,其线程不安全 StringBuffer同样应用于频繁操作字符串,但是其原码加synchronized,其线程是安全的, 因为加了synchronized,获取锁和释放锁也还是需要时间的,其效率较低(比String效率高,比StringBuilder低) 从运行效率看,StringBuilder>StringBuffer>String String适合少量字符串的操作 StringBuilder适合单线程大量数据的操作 StringBuffer适合多线程大量数据的操作
发表于 2022-10-14 20:08:16
回复(0)
3
肿么肥四.
关于String、StringBuffer、Stringbuilder区别从四个方面来理解 1.值可变性: String是不可变的,如果尝试修改String的值,都会产生一个新的字符串对象。 StringBuffer和StringBuilder是可变的,修改不会产生新的对象。 2.线程安全: String是线安全的,因为它不可变。 StringBuffer是线程安全的,因为它里面的每个操作方法都加了synchronized关键字。 StringBuilder是线程不安全的,单线程下使用StringBuilder效率最高。 3.性能: String效率最低,其次是StringBuffer,StringBuilder性能最好 因为String不可变,所以每次做字符串拼接的时候一直创建新的对象和分配内存空间 StringBuffer加了同步锁,StringBuilder是无阻塞的。 4.数据存储: String存储在字符串常量池中。 StringBuffer和StringBuilder存储在堆内存中。
编辑于 2024-04-16 09:52:02
回复(1)
3
十七_
String 是一个不可变类,StringBuffer和StringBuilder是可变的; String和StringBuilder不是线程安全的,StringBuffer是线程安全的; StringBuilder的效率比StringBuffer的执行效率高
发表于 2022-04-26 14:45:17
回复(2)
2
慕小言
String,StringBuffer、StringBulder都可以操作字符串,但是String是不可变的,通过看源码可以看出底层是被final修饰的byte数组, StringBuffer和StringBulder都是可变序列,但是StringBuffer 是线程安全,而Stringbulder是线程不安全,StringBulder的效率最高。
发表于 2022-08-30 11:21:36
回复(0)
2
牛客154175847号
Stringbuffer和StringBuilder的方法和功能是等价的, Stringbuffer的方法都有synchronized修饰,所以StringBuffer是线程安全的。 StringBuilder的方法是没有synchnuzed修饰的,所以StringBuilder是线程不安全的。 在单线程模式下,StringBuilder的效率比StringBuffer跟快,因为StringBuilder没有加锁,不具备线程安全,而StringBuffer每次都要判断锁,效率跟低。
发表于 2022-05-13 09:44:53
回复(0)
2
你看起来很好吃0
String是一个不可变类,在一个对象创建后,直到这个对象销毁为止,对象中的字符序列都不能被改变。stringBuilder和stringBuffer对象则代表一个字符序列可变的字符串,区别则是有没有考虑线程安全
发表于 2022-05-07 18:20:59
回复(0)
1
樱木花道🌸
string类是用final修饰的不可以被继承的,string类的字符串是不可变的字符串,也就是说从这个字符串从被创建到销毁都不能被改变,而stringbuffer是可变序列字符串,可以通过append,insert,reverse等方法对字符串进行操作,等得到了想要的字符串后通过tostring方法装换成字符串,而stringbuilder和stringbuffer的区别在于stringbuffer是线程安全的,所以stringbuilder的性能更好
发表于 2023-06-24 19:48:20
回复(0)
1
彳亍前行的追梦人
String是不可变对象,因为其底层是一个被final修饰的char数组,用于保存字符串中对应的字符。所以String对象一旦创建,其内容就不可被修改。每次修改都会创建新的对象。StringBuilder和StringBuffer是可变的字符串对象,当字符串需要频繁修改时,建议使用StringBuffer或StringBuilder,它们提供了appen()、insert()、delete()、reverse()等方法来对字符串进行操作。当涉及到线程安全时,建议使用StringBuffer.因为其底层对方法添加了synchronized锁关键字,是线程安全的。
发表于 2023-06-07 19:41:21
回复(0)
1
田同学没有昵称
🆗
发表于 2023-03-05 20:23:03
回复(0)
1
河马爱泡澡🛀
String final修饰不可变,直接赋值以后常量池来管理,buff可变且安全,build不安全
发表于 2023-02-13 01:47:07
回复(0)
1
廟文
1、String是final修饰的,是不可变(变了会生成一个新的字符串),而StringBuffer和StringBuilder可变; 2、StringBuffer线程安全,StringBuilder线程不安全,但在单线程下效率更高;
发表于 2023-02-12 13:27:46
回复(0)
1
岑溪123
String是一个不可变类,是线程安全的;StringBuilder和StringBuffer都是可变类的,可以通过append(),reserve()等方法改变字符串序列,StringBuilder是线程不安全的,StringBuffer是线程安全的;因为StringBuffer类中的方法加了synchronized锁,所以性能比StringBuilder低。
编辑于 2023-04-03 17:22:48
回复(0)
1
自信的大白菜
StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
String:不可变字符序列,效率低,但是复用率高。
StringBuffer:可变字符序列、效率较高(增删)、线程安全
StringBuilder:可变字符序列、效率最高、线程不安全
多线程高并发情况下应该使用线程安全的StringBuffer类!
编辑于 2023-02-01 16:00:16
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Java
上传者:
real19931
难度:
163条回答
406收藏
2162浏览
热门推荐
相关试题
体育课测验(二)
广度优先搜索(BFS)
拓扑排序
dfs
评论
(2)
游戏内数据分析涉猎的少,如何证明自...
评论
(1)
之前的经历中单品数据分析的经验丰富...
评论
(1)
什么样的人适合做数据分析
评论
(1)
2022 诺瓦科技 Perl re...
perl
System Verilog
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题