美文网首页Java
String 、StringBuffer与StringBuild

String 、StringBuffer与StringBuild

作者: 一萍之春 | 来源:发表于2019-02-12 13:24 被阅读18次

    1、运行速度,或者说是执行速度:

    在这方面运行速度快慢为:StringBuilder > StringBuffer > String
      String最慢的原因:
      String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

     String str="123";
     System.out.println(str);
     str=str+"45";
     System.out.println(str);
    

    如果运行这段代码会发现先输出“123”,然后又输出“12345”,此时不是简单得在常量池里面将123的字符串加上45就完事的,而是此时的str+="45";相当于str = new StringBuffer(str).append("45").toString();所以String每次用“+”链接都相当于在堆内存中先实例化一个StringBuffer然后再调用其append方法,最后调用toString方法转换成字符串。 所以String比StringBuilder和StringBuffer慢。

    2.在线程安全上:

    StringBuilder是线程不安全的,而StringBuffer是线程安全的
      如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

    3总结:

    String:

    是对象不是原始类型.
    为不可变对象,一旦被创建,就不能修改它的值.
    对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
    String 是final类,即不能被继承.

    StringBuffer:

    是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
    它只能通过构造函数来建立,
    StringBuffer sb = new StringBuffer();
    注意:不能通过赋值符号对他进行赋值.
    sb = "welcome to here!";//error
    对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向####StringBuffer
    中赋值的时候可以通过它的append方法.
    sb.append("hello");
    字符串连接操作中StringBuffer的效率要比String高:

    StringBuilder:

    其与StringBuffer差不多就是其中没有synchronized关键字,所以它的速度比StringBuffer快。

    相关文章

      网友评论

        本文标题:String 、StringBuffer与StringBuild

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