Java

String 、StringBuffer与StringBuild

2019-02-12  本文已影响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快。

上一篇下一篇

猜你喜欢

热点阅读