String 与 StringBuilder、StringBuffer区别
String 与 StringBuilder、StringBuffer区别
linyaohua 发表于2年前
String 与 StringBuilder、StringBuffer区别
  • 发表于 2年前
  • 阅读 7
  • 收藏 0
  • 点赞 1
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

String

String 类使用char[]存储字符,并在char[]用final标识,所以String对象一经创建长度就是固定的不可变的了;

public final char value[];

StringBuilder、StringBuffer

共同继承abstractStringBuilder类,用public char value[];装载字符串,所以数组长度是可变的,可通过Capacity设置数组长度,一旦字符长度超出容量,数组长度会自动翻倍扩展。EnsureCapacity检查当前value[]宽度。

此外,StringBuffer在abstractStringBuilder之外添加了同步锁,所以StringBuffrer是线程安全的。


从执行效率上比较,执行速度是StringBuilder>StringBufer>String,所以当数据量小的时候,可以用较小的时候可以选择使用String,数据量较大且保证线程安全的情况下(如IO),使用StringBuffer,若不需要支持线程安全,从速度方面考虑,应该使用StringBuilder.

为什么StringBuilder、StringBuffer在性能上跟String有区别呢?

String a = “abc”;

a+="efg";

实际上,上面这两条语句,创建了三个String对象“abc”,“efg”,"abcefg".

String str = new String(“abc”)+new String("abc");

则创建了4个String对象,首先创建一个“abc”对象用于存储“abc”,然后new 了一个String 对象,第二个new String("abc"),由于已经存在“abc”对象,所以不需要重新创建,但是此时又new了一个对象,最后创建一个String对象用于存储结果,所以一共创建了4个String对象。

由此可见,不断地创建String在性能上肯定会有影响的。

而StringBuffer与StringBuilder则始终操作一个String对象,只是对长度有所调整就可以了。

共有 人打赏支持
粉丝 0
博文 5
码字总数 3006
×
linyaohua
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: