首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
String、StringBuffer、Stringbuil
[问答题]
String、StringBuffer、Stringbuilder有什么区别
添加笔记
求解答(0)
邀请回答
收藏(402)
分享
纠错
156个回答
添加回答
193
牛客843146024号
最后一句话是错了吧
发表于 2022-03-18 12:26:57
回复(1)
107
Deser
StringBuilder和StringBuffer非常类似,均代表可变的字符序列,而且方法也一样
String:不可变字符序列,效率低,但是复用率高。
StringBuffer:可变字符序列、效率较高(增删)、线程安全
StringBuilder:可变字符序列、效率最高、线程不安全
发表于 2022-03-26 10:20:07
回复(4)
53
牛莲牛奶呀_
m
发表于 2022-03-11 15:47:46
回复(1)
27
木一猿猴
三者都是引用数据类型,都是对字符串进行相关操作的类。三者的区别主要有以下几点: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是可变的; 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、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
回复(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)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Java
上传者:
real19931
难度:
156条回答
402收藏
2142浏览
热门推荐
相关试题
假定一个待哈希存储的线性表为(32...
哈希
评论
(1)
5.下列判断正确的是( )
资料分析
言语理解与表达
资料分析
评论
(1)
《拳皇97》最后BOSS是谁?
游戏常识
评论
(1)
《魔兽世界》中,下列不属于玩家可以...
游戏常识
评论
(1)
你有没有崇拜的偶像,你欣赏他/她身...
通用能力
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题