StackTc 2018-02-04 04:31 采纳率: 90%
浏览 1506
已采纳

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

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

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

  • 写回答

11条回答 默认 最新

  • forever_kinson 2018-02-04 05:16
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 原点2333 2018-02-04 04:41
    关注

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

    评论
  • qq_41252574 2018-02-04 04:47
    关注

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

    评论
  • Lemon林 2018-02-04 05:09
    关注

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

    评论
  • qq_40704245 2018-02-04 05:43
    关注

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

    评论
  • jsxjd 2018-02-04 08:13
    关注

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

    评论
  • StackTc 2018-02-04 08:19
    关注

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

    评论
  • qq_38747204 2018-02-04 09:13
    关注

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

    评论
  • miracle‥ 2018-02-04 09:33
    关注

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

    评论
  • hao123369963 2018-02-04 09:35
    关注

    String 主要用于生成变量或常量,不需要重新编辑。
    StringBuffer的对象存在堆区,线程安全,可任意拼接且不创建新的对象,可以重新对变量进行编辑

    评论
  • threenewbee 2018-02-04 16:18
    关注

    +的优点很明显,它是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,甚至更少。那么你想想吧。

    评论
查看更多回答(10条)

报告相同问题?

悬赏问题

  • ¥15 关于#c++#的问题:c++如何使用websocketpp实现websocket接口调用,求示例代码和相关资料
  • ¥15 51单片机的外部中断,按下按键后不能切换到另一个模式
  • ¥15 java连接sqlserver有问题
  • ¥15 yolov8 如何调cfg参数
  • ¥15 这个四人抢答器代码哪儿有问题?仿真程序怎么写?
  • ¥15 burpsuite密码爆破
  • ¥15 关于#ubuntu#的问题,如何解决?(相关搜索:移动硬盘)
  • ¥15 scikit安装之后import不了
  • ¥15 Ros2编译一个使用opencv的c++节点的时候,报了这个错误,请问怎么解决啊
  • ¥15 人脸识别相关算法 YOLO,AI等