java中对字符串的操作方法区别

字符串拼接可以用+,concat,StringBuilder的append

请问StringBUilder的速度 超级快,那么 前面2个方法存在的意义是什么呢。

11个回答

+号会重新创建一个字符串对象,而StringBuilder的append的方法是直接在原来的字符串后面添加新的字符。+号可能更加方便一些,但开销也更大,速度不如StringBuilder快

+,每次会重新生成对象,造成资源浪费,不建议重复使用,StringBuilder推荐

+号的作用是重新创建一个字符串对象,之前的字符串对象并未改动,StringBuilder的append的方法是直接在原来的字符串后面添加新的字符,所有速度更快

+的优点很明显,它是String的内置操作符,它直观,简单。
concat本质上和+是一样的,+只是java编译器的魔术。
StringBuffer是一个额外的类,它仅仅用来对于频繁的字符串的连接的性能优化。
但是你要明确一个概念,就是程序的第一目的是简洁、容易维护而不是性能。否则为什么我们用java,java还调用虚拟机,虚拟机才解释成机器码。
另一个原则是性能热区概念,也就是一个程序中只有极少数的代码是频繁执行,耗时最多的,这些被称为热区(hotspot)。如果你对这些极少数代码优化,可以明显加快程序运行。
但是如果你漫无目的地优化,那么因为优化的代码本身并不是热区,所以从总体上看,程序没有什么实质性的增速。相反,程序可读性还变差了。
所以说,“过早优化是万恶之源” 参考:https://www.zhihu.com/question/24282796
最后就算考虑性能,如果String s = s + "1"; 如果只是运行这么1次,它的性能甚至比StringBuffer.append还高。
append固然效率高,但是还要考虑StringBuffer对象本身被构造的性能开销,这个开销也是有的,并且比单次调用+要高。
好比飞机比汽车快,但是具体到实践中未必如此,如果你去100km以外的地方,飞机反而慢。飞机还要去机场,等飞机,这些时间都有开销。
StringBuffer的效率还是用空间换来的,StringBuffer默认会开一个缓冲区(所以叫buffer),如果你存1个字符,那么可能会白白浪费几百字节。
StringBuffer浪费了空间,不仅仅是空间。我们知道,虽然现在计算机的内存很大,不少这点字节,但是和高速缓存相比,内存是很慢的,而计算机的高速缓存只有几mb,甚至更少。那么你想想吧。

每次用“+”执行字符串连接,都会生成一个新 String 对象,因此频繁的使用"+"连接字符串(例如在循环体内)会增加不必要的开销,这种场景下考虑用 StirngBuilder,不会频繁创建新对象

重新生成对象,造成资源浪费,不建议重复使用

StringBuilder需要预分配内存,适合密集字符串操作

各位我问的是 + 的优点是什么,而不是 StringBuilder的优点,就比如 。我问你手枪相对于飞机 优势在哪里,你告诉我 飞机 可以飞上天 干嘛

StringBuilder不是线程安全的,所以速度快

String拼接会重复生成对象,对于字符拼接不建议使用
String主要用于固定字符串,它的对象存在常量池中,调用方便
StringBuffer的对象存在堆区,线程安全,可任意拼接且不创建新的对象
对于存在的意义,他们两个用处不同,各有优缺点,只不过各司其职罢了
分享一个链接 可以看看 望采纳 !!!
https://www.cnblogs.com/xiohao/p/4296088.html

s_monster_
z.monster 回复StackTc: 看到一篇不错的文章 可以去看看 https://blog.csdn.net/m0_37589327/article/details/78605268
一年多之前 回复
s_monster_
z.monster 回复StackTc: +的底层也是StringBuffer来实现的,他们的实际效率基本相同,不过+一般是静态字符串拼接,append用来动态拼接
一年多之前 回复
StackTc
StackTc 我问的是+跟append +的优点。。不是String跟StringBuiler的区别
接近 2 年之前 回复
共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问