美文网首页
Java中 String、StringBuffer、String

Java中 String、StringBuffer、String

作者: 杨阿杨阿阳 | 来源:发表于2019-06-10 18:30 被阅读0次

    好久、好久、好久没有写博客了。自从上个公司离职后,觉得我的博客习惯被打破了,自己的自控能力还是好弱。

    今天来简单介绍一个比较基础的问题,因为有人可能会搞混,或者不是很明确,简单说一下,并且用到实战中。

    String

    String 应该是我们平时在开发中用到最多一个变量了叭,举个例子:

    private String m_spos;
    或者
    private String m_spos = "";
    

    --我们还需要知道,这个情况下,底层做了哪些操作:
    new 对象,大家应该都很不陌生,String是一个不可变的变量,我们在代码中可能还会这样写道:

    String a = "a";
    String b = "b";
    String c = "c";
    c = c + a;
    c = c+b;
    

    老玩家应该会注意到,为什么不用StringBuffer; 其实这样的问题我曾经也有过疑问,StringBuffer有什么优势吗?
    这里我们先声明一下对String这样操作之后,底层做了什么:

    String c = "c"; 相当于new了一个 c 对象,
    c = c + a; 相当于又new了一个c对象,然后将以前的值覆盖掉。
    c = c+b; (同上)

    下面来说StringBuffer吧

    StringBuffer

    StringBuffer也简单说一下平时的使用:

    StringBuffer sb = new StringBuilder();
    sb.append(“a”);
    sb.append(“b”);
    sb.append(“c”);
    sb.toStriing();//得到我们最终需要的字符串
    

    简单说一下做了什么工作吧:

    StringBuffer sb = new StringBuilder(); 新建一个对象
    sb.append(“a”); 拼接内容,对象地址并不做改变。
    sb.append(“b”);(同上)
    sb.append(“c”);(同上)

    说到这里,大概知道谁的性能要好一些了叭。

    再来说一下,StringBuilder

    StringBuilder

    其实StringBuilder与StringBuffer是一样的,这里要贴出一点StringBuilder与StringBuffer的源码对比,用来区分StringBuilder与StringBuffer的区别。

    StringBuilder

      @Override
        public StringBuilder reverse() {
            super.reverse();
            return this;
        }
    

    StringBuffer

      /**
         * @since   JDK1.0.2
         */
        @Override
        public synchronized StringBuffer reverse() {
            toStringCache = null;
            super.reverse();
            return this;
        }
    

    最后我们来总结一下,
    String 每次拼接都会改变对象值,并且要新建一个对象

    StringBuffer 不改变地址值,并且拼接字符串,线程安全(拥有锁:synchronized)

    StringBuilder 不改变地址值,并且拼接字符串,线程不安全。

    注:不了解同步锁的同学自行百度,补基础,根据业务需要选择不同的类。会有意想不到的收获

    相关文章

      网友评论

          本文标题:Java中 String、StringBuffer、String

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