Java String StringBuffer StringBuilder

来源:互联网 发布:淘宝海报设计价格 编辑:程序博客网 时间:2024/05/21 08:52

一,String保存的字符常量不可改变

看例子:

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

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

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

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

二,StringBuffer可以修改保存的内容

看例子:

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

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

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

三,StringBuffer与StringBuilder

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

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

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

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

OVER!

原创粉丝点击