String、StringBuilder、StringBuffer

来源:互联网 发布:网络收音机mac版 编辑:程序博客网 时间:2024/05/24 01:20

String是一个不可变的字符串,这样的拼接语句实际上创建了多个字符串对象。

String str="abc";//创建一个字符对象str=str+"def";//对象不可变,重新将拼接后的值创建新的对象

每次的拼接会创建一个新的字符串对象,对象的创建开销是很大的。

public class StringConcat{    public static void main(String[] args) {        StringBuilder builder=new StringBuilder("abc");        builder.append("def");        System.out.println("builder拼接结果"+builder.toString());        //拼接效果等价于        String str1="abc";        str1=str1+"def";        System.out.println("builder拼接结果"+str1);    }}

反过来看下StringBuilder,是可变的字符串,不管拼接多少次都是只创建一个对象。系统的开销就很小了。

StringBuilder和StringBuffer的不同:

StringBuilder和StringBuffer在使用的时候没有任何区别,它们的方法、构造函数签名都是一样的。

那为何还要提供两个功能相同的API来作为字符串的操作呢?当然是有内部区别的。

在多线程的情况下使用StringBuffer保证数据的同步。在单线程情况下两个都可以用,StringBuilder会快一些。

除了追加字符串使用append()方法外StringBuilder 和StringBuffer的其他操作:

indexOf(String str)查找子字符串,

insert()在指定位置添加字符串,

delete(int start, int end)删除子串,

replace()使用给定String中的字符替换此序列的子字符串中的字符,

reverse()将此字符序列用其反转形式取代,

substring()截取子串等等。

原创粉丝点击