String,StringBuffer,StringBuilder

String,StringBuffer,StringBuilder
 String是不可变字符串,对String进行任何操作,都不会影响String本身,比如字符串连接,截取,大小写转换等都会生成新的字符串对象,原来的对象并不会改变。
 public static void main(String[] ar) throws Exception {
        String str="abc";
        String str2=str+"def";
        System.out.println(str);

        str.toUpperCase();

        System.out.println(str);

        str.substring(2);
        System.out.println(str);
    }

结果:
abc
abc
abc

StringBuffer,一个类似于 String 的可变字符串缓冲区,几乎包含了String对象的所有方法。每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。因此,在构造此类的对象时,根据需要指定合适的缓冲区容量,可以避免内部自动扩充而提升程序性能。如StringBuffer sb=new StringBuffer(100);//初始化100个字符的缓冲区。
StringBuffer的可变性在于通过append()方法及insert(),delete()等方法时,StringBuffer对象本身的内容会改变。
public static void main(String[] ar) throws Exception {
        StringBuffer str=new StringBuffer(50);//指定合适的容量可以避免缓冲区自动扩充容量,提升程序性能
        str.append("abc");
        str.append("def");
        System.out.println(str);
    }
结果:
abcdef

StringBuffer是对象安全的,原因在于对其进行修改的方法都内置了同步。如append()方法在StringBuffer中的形式是:
public synchronized StringBuffer append(String str)

StringBuilder与StringBuffer几乎一致,不同之处在于StringBuilder是非线程安全的。对其修改的方法并未有同步。
 public StringBuilder append(String str)

总结
在实际中使用字符串时尤其是需要频繁连接追加等操作时,StringBuffer与StringBuilder是更好的选择,如果是在单线程环境中使用,使用StringBuilder因为没有额外的同步开销,比StringBuffer更好,如果多线程环境中优先考虑StringBuilder


====================================================================================
关注微信公众号 “Java技术”,可以实时获取有价值的技术文章推送。
"Java技术"交流群: 245130488  

"Java软件工程师培训"系列课程正式推出,助你自学成才,进入IT行业。

www.chuanke.com/s3377987.html

 

 本文用 菊子曰发布

你可能感兴趣的:(String,StringBuffer,StringBuilder)