美文网首页
java String,StringBuffer和Stringb

java String,StringBuffer和Stringb

作者: setone | 来源:发表于2018-11-26 17:02 被阅读0次

    java中Stringbuffer和String是有一定区别的,首先,String是被final修饰的,它的长度是不可变的,就算调用String的concat方法,那也是把字符串凭借起来重新创建一个对象,把拼接后的String赋值给新创建的对象,而StringBuffer的长度是可变的,调用StringBuffer的append方法,来改变StrignBuffer长度,并且,相比较于StringBuffer,String一旦发生长度变化,是非常耗费内存的


    String长度大小不可变
    Stringbuffer和StringBuilder长度可变
    StringBuffer线程安全StringBuilder线程不安全
    StringBuilder速度快


    java中的StringBuilder和StringBuffer使用的适用场景
    最简单的回答是,StringBuffer基本没有适用场景,如果遇见了,,,,,
    让后补充一点,关于线程安全,即使真的遇见了这种场景,很不幸的事,恐怕你仍有99.99%的情况下没有必要选择StringBuffer,因为StringBuffer的线程安全,仅仅是保证jvm不抛出异常顺利往下执行而已,他可不保证逻辑正确和调用顺序正确,大多数时候,我们需要的不仅仅是线程安全而是锁,
    最后,为什么会有StringBuffer的存在,如果真的没有价值,为什么jdk会提供这个类,答案太简单了!,因为最早是没有StringBuilder的,sun的人不知处于何种愚蠢的考虑,决定让StringBuffer是线程安全的,然后大约10年后,人们终于意识到这是一个多么愚蠢的决定,意识到在这10年之中这个愚蠢的决定为java运行速度慢这样的流言贡献了多大力量,于是在jdk5的时候,终于决定提供一个非线程安全的StringBuffer的实现,并命名为StringBuilder,顺便javac好像也是从这个版本开始把所有用+号连接的String运算都隐式的发写成StringBuilder,也就是说,从jsk5,用+拼接字符串没有任何性能损,严格来说没有循环的情况下,单行用+拼接字符串是没有任何损失的,但是如果有循环的话,编译器是不能做到智能的替换的,所以拼接字符串还是老老实实用StringBuilder吧

    相关文章

      网友评论

          本文标题:java String,StringBuffer和Stringb

          本文链接:https://www.haomeiwen.com/subject/bqibqqtx.html