美文网首页
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