Java中 Buffer的作用

本文探讨了Java中Buffer的重要作用,特别是在处理大量字符串拼接时如何通过使用StringBuffer避免内存浪费,提升程序效率。
要弄清楚Java之中的Buffer的作用,首先需要明白java之中Wrapper类型都是不可变的。什么是不可变类型呢? 顾名思义,就是这种类型的对象一旦创建好之后,无论调用何种方法都无法改变该对象的任何的属性。你看看String类的源代码就会发现,它的所有的属性都是private final的,因此只有在构造String的时候,这些属性可以修改的。

String类的方法中需要返回一个String的,如substring,concat等都会构造一个新的String对象,然后返回,而原来的String对象是不会发生变化的。

这样,当如果有要用大量的小字符串拼接成一个长的字符串的时候,就会构造大量的中间的字符串:
如下面的例子:
   String [] arr1 = new String[10];
    for (int i=0; i<arr1.length; i++)
      arr1[i] = "Value" + i;
    String result = "";
    for(String s : arr1) {
      result = result + s;
    }

最后一个循环执行的时候,就会生成大量的字符串临时对象:
Value0
Value0Value1
Value0Value1Value2
Value0Value1Value2Value3
....
Value0Value1Value2Value3Value4Value5Value6Value7Value8Value9

这10个String对象之中,我们需要的只是最后的一个,前面的9个都会浪费内存。如果情况更糟的话,有几百个上千个,或者中间的字符串更长,浪费将会更加的严重。

StringBuffer就是为了解决这个问题。它是可变的,当修改或者追加字符串到原来的对象上是,不会新生成一个字符串,而是在原来的对象上进行修改。这样,就不用分配大量的空间给中间的临时对象了。

其他的Buffer也是类似的原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值