栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中StringBuffer类的简要解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中StringBuffer类的简要解析

        1.意义

           从现象看本质。在Java中,当需要大量进行字符串拼接时,频繁使用“+”进行拼接是不合理的,因为每用“+”拼接一次,它并不是简简单单的在前面的基础上进行扩容,而是不断的通过创建新的对象去存储字符串,这样导致的结果是使得方法区的内存被极大地消耗。

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

}

  System.out.println(s);

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

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

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

        2.StringBuffer的简要原理

           往最简洁了说,StringBuffer类是从创建对象这个过程转移到了通过数组进行缓存(这跟数据结构中栈缓存是有着异曲同工之妙的)。在StringBuffer类的源码中,可以看到字符串直接被转化为了byte[]数组。

String.valueOf(stringBuffer).getBytes()

            至此,我们可以模糊地知道:哦,原来StringBuffer可以用来创建字符串的缓冲区对象啊!

        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$#!");
sb.append("");
sb.append("SiDevLg");
sb.append("179,123456,9,33:44:44:55:66:77,0");
sb.append("");
sb.append("!@#V3");
System.out.println(sb);

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

                 (3)StringBuffer的性能优化

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

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

                       问题答案很简单:

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/306254.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号