1.意义

方法区的内存被极大地消耗。

String s="";
 for(int i=0;i<101;i++){
     s=s+i;

}

  System.out.println(s);

试着用图解的方式在方法区中表示出,创建了多少对象?

答案是101个;天啊!这得多消耗方法区内存!!!

有没有什么办法去解决或者说是缓冲这一现象?很人性的是,答案是有,就是通过Java.lang包下的StringBuffer类去解决这一尴尬问题。

        2.StringBuffer的简要原理

字符串直接被转化为了byte[]数组。

String.valueOf(stringBuffer).getBytes()

字符串的缓冲区对象啊!

        3.StringBuffer的简单使用方法

             (1)构造方法

                     

StringBuffer sb=new StringBuffer();

StringBuffer sb1=new StringBuffer(10);

StringBuffer sb2=new StringBuffer("str");

                    通过new了3个StringBuffer类的实例对象sb、sb1、sb2,可以看出,有多个构造方法。对于sb,它表示没有存储任何字符串,默认长度为16的缓冲区;对于sb1,表示没有存储任何字符串,长度设定为10;对于sb2,表示以“str”字符串为开端进行存储。三者根据开发者的需求去进行选择。

               (2)一个常用方法:扩容   append()

               

StringBuffer sb = new StringBuffer();
sb.append("#@!246$#!<?xml version='1.0'?>");
sb.append("<Ec>");
sb.append("<HeadTitle>SiDevLg</HeadTitle>");
sb.append("<DI>179,123456,9,33:44:44:55:66:77,0</DI>");
sb.append("</Ec>");
sb.append("!@#V3");
System.out.println(sb);

                      扩容顾名思义,便是在原有的字符串基础上进行扩充。通过查看append源码可发现,该方法调用了Arrays中的copyOf方法,即数组拷贝。说到这,大家应该顿时豁然开朗了。当然,扩充也是占资源的,能少扩充当然就尽可能少的去用。

                 (3)StringBuffer的性能优化

                       在面试中,经常会被问到:如何对StringBuffer类的使用进行优化呢?

                       该回答得当,至少会被认为Java中,你已经有了较深入的研究了。

                       问题答案很简单:

                       1.创建对象时,最好先给StringBuffer设定一个缓冲区长度值。

                       2.设定的长度尽可能够用,适当,避免后续扩充次数的过度使用。