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.设定的长度尽可能够用,适当,避免后续扩充次数的过度使用。