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