字符串拼接可以用+,concat,StringBuilder的append
请问StringBUilder的速度 超级快,那么 前面2个方法存在的意义是什么呢。
字符串拼接可以用+,concat,StringBuilder的append
请问StringBUilder的速度 超级快,那么 前面2个方法存在的意义是什么呢。
收起
当前问题酬金
¥ 0 (可追加 ¥500)
支付方式
扫码支付
+号会重新创建一个字符串对象,而StringBuilder的append的方法是直接在原来的字符串后面添加新的字符。+号可能更加方便一些,但开销也更大,速度不如StringBuilder快
+号的作用是重新创建一个字符串对象,之前的字符串对象并未改动,StringBuilder的append的方法是直接在原来的字符串后面添加新的字符,所有速度更快
每次用“+”执行字符串连接,都会生成一个新 String 对象,因此频繁的使用"+"连接字符串(例如在循环体内)会增加不必要的开销,这种场景下考虑用 StirngBuilder,不会频繁创建新对象
+,每次会重新生成对象,造成资源浪费,不建议重复使用,StringBuilder推荐
重新生成对象,造成资源浪费,不建议重复使用
StringBuilder需要预分配内存,适合密集字符串操作
各位我问的是 + 的优点是什么,而不是 StringBuilder的优点,就比如 。我问你手枪相对于飞机 优势在哪里,你告诉我 飞机 可以飞上天 干嘛
StringBuilder不是线程安全的,所以速度快
String拼接会重复生成对象,对于字符拼接不建议使用
String主要用于固定字符串,它的对象存在常量池中,调用方便
StringBuffer的对象存在堆区,线程安全,可任意拼接且不创建新的对象
对于存在的意义,他们两个用处不同,各有优缺点,只不过各司其职罢了
分享一个链接 可以看看 望采纳 !!!
https://www.cnblogs.com/xiohao/p/4296088.html
String 主要用于生成变量或常量,不需要重新编辑。
StringBuffer的对象存在堆区,线程安全,可任意拼接且不创建新的对象,可以重新对变量进行编辑
+的优点很明显,它是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,甚至更少。那么你想想吧。
报告相同问题?