StringBuffer和StringBuilder

     Java 的字符串String对象,有一个特性,就是不变性,他只能呗创建,而不能改变其中的值。因此。一些大量使用字符串的程序可能出现性能瓶颈,甚至内存溢出,针对这样的问题。java开发者提供了相应的解决方案。

   

Public classStringBBTest{

    public static void main(String[] args){
               
        String a ="a";
        String b="b";
        String c ="c";
        String d ="d";
        String abcd=a+b+c+d;
        
     }

}



      以上代码中,一共创建了7个String对象,对于a,b,c,d变量,他们都是通过双引号形式来创建String对象。而abcd变量的值则是通过他们4这相连得到。在相连的过程中,首先执行a+b操作,产生了ab字符串,然后加上了c,又长生了abc字符串,最后加上d才得到abcd的String对象。

    由以上的示例可以看出,通过String直接相加来拼接字符串的效率是很低的,其中可能会产生多余的String对象,例如ab和abc。如果程序中需要拼接的字符串数量成千上万的话,那么JVM的负荷是非常大的,严重的影响到程序的性能。其实如果大量字符串需要拼接的话,应该使用StringBuffer和StringBuilder类,它们是对String的一种补充。例如,同样的功能,可以这样写代码来提高程序的性能,如下

Public classStringBBTest{

    public static void main(String[] args){
               
        String a ="a";
        String b="b";
        String c ="c";
        String d ="d";


       StringBuffer sb=new StringBuffer();
       sb.append(a);
       sb.append(b);
       sb.append(c);
       sb.append(d);
       String abcd=sb.toString();
       System.out.println(abcd);




   }

}

    上例是通过StringBuffer来拼接字符串的,他无法保证线程安全。如果在拼接字符串的过程中可能会设计到线程安全的问题,则该使用StringBuilder,他们两者的功能和API是类似的。

   

猜你喜欢

转载自mzl1989325.iteye.com/blog/2222863
今日推荐