编程语言
首页 > 编程语言> > javase(String、StringBuffer、StringBulider的区别)

javase(String、StringBuffer、StringBulider的区别)

作者:互联网

1、存储空间

(1)String的对象一旦创建就不能改变(实质是一个被final修饰的字符数组),是一个常量,对String操作后会生成新的String,效率低且浪费空间。

  public  static  void main(String [] args){
        String string="jiayou!!";
        System.out.println(string);
        string="zhongguo"+"jiayou!!";
        System.out.println(string);
    }

 

 根据运行结果来看,string看似已经被修改了,但是实际上并没有被修改。刚开始创建一个string对象并赋值为“jiayou!!”,在第二次赋值的时候,又创建了一个新的对象,将值赋给新的对象,而原来的对象被JVM的垃圾回收机制回收掉了。

(2)StringBuffer和StringBulider的对象都是可以改变的(实质是可变长度的字符数组),节省了空间,效率较高。不能使用String"+"来拼接,避免产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)。

    public  static  void main(String [] args){
        StringBuffer stringBuffer=new StringBuffer().append("wuhai").append("jiayou!!");
        System.out.println(stringBuffer.toString());
    }

这样的话JVM就不用频繁地创建和回收对象了,速度就会加快,也节省了空间。

2、线程安全性

(1)线程安全:String、StringBuffer

StringBuffer中的很多方法带有synchronized关键字加了同步锁,保证了线程的安全性,但是StringBulider没有。所以,多线程的情况下必须使用StringBuffer。(在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer)

(2)线程不安全:StringBulider

单线程的情况下使用(如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用 StringBuilder)

3、执行效率:StringBulider最快,Stringbuffer次之,String最差

StringBulider线程不安全,速度最快;StringBuffer线程安全,速度稍慢;String线程安全,速度最慢。

 

标签:String,StringBulider,对象,StringBuffer,线程,javase,string
来源: https://www.cnblogs.com/zhai1997/p/12423092.html