Java String StringBuffer StringBuilder

1. String保存的字符常量不可改变

看例子:

String a="1";
a="2";

此处,先是"1"在内存开辟空间存储,然后a保存的是"1"的地址。在执行a=“2"时,注意不是将a指向地址的内容更换为"2”,而是又开辟了空间存储"2",然后把新的地址赋给了a。

也就说是,像"1"、“2”、“hello”等字符串常量是不可改变的,而a这种字符串对象保存的值是可以改变的,所以会发生这样的情况。

所以,考虑如下场景,要反复的修改字符串内容,则会反复的在新的地址空间存放新的字符串,最终会占用很多空间,垃圾收集器不得不更加频繁的收集垃圾,导致性能降低。

2. StringBuffer可以修改保存的内容

看例子:

StringBuffer sb=new StringBuffer("1");
sb.append("2");

首先sb保存的地址是"1"的地址,第二步时,该地址内容改为“12",没有使用新的地址。

所以当需要频繁的修改字符串时,建议使用StringBuffer类。

3. StringBuffer与StringBuilder

这两个类的方法是完全一样的,例如常用的:

append(T)    追加
insert(int,T)    插入
delete(int,int)  删除

唯一的区别是,StringBuffer类中的方法定义使用了synchronized进行修饰,表示StringBuffer中的方法都是同步方法,是线程安全的,而StringBuilder中的方法没有synchronized修饰,属于异步方法,线程不安全的。

老兄,如果不确定或者搞不懂是否需要线程安全,直接用StringBuffer,完事,可想而知安全需要代价,StringBuffer性能稍微差一点点。


如有问题请扫码联系我
在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页