Java常用类:StringBuffer类(学习笔记)

关于StringBuffer类(学习笔记)

在我们实际开发当中,也许会遇到需要我们频繁拼接字符串的时候,这个时候我们应该怎么办呢?
在Java中,字符串是不可变的,每一次的拼接都会产生新的字符串,这样会占用大量的方法区内存,造成内存空间的浪费,如下:

String s = "Hello";
s += "World";
就以上两行代码,就会创建三个字符串对象,
“Hello”
“World"
"HelloWorld"

为了避免以上的情况,我们需要用到我们的StringBuffer类。
StringBuffer

  • StringBuffer底层是一个byte[ ] 数组,他的初始容量默认是16(一个字符串缓冲区对象),当我们需要拼接字符串的时候,我们可以调用StringBuffer的append()方法,append是追加的意思。他会帮我们把需要的字符串拼接起来而不会在字符串常量池中创建新对象,从而节省了大量的方法区内存。如下:在这里插入图片描述
    如果我们在进行append()追加的时候,底层的byte[ ]数组满了,他会自动扩容。但是频繁的进行数组扩容会影响程序的执行效率,所以我们可以对StringBuffer的性能进行优化。

  • 如何优化StringBuffer的性能?
    在创建StringBuffer对象的时候预估下自己需要的字符串长度,尽可能的给定一个初始化容量,减少底层数组的扩容次数。

StringBuffer stringBuffer = new StringBuffer(100);
这样底层的byte[ ]数组的容量就是100了。
但是也不要给定太大的容量,同样会造成内存的浪费。
  • StringBuffer和StringBuilder的区别
    StringBuffer的方法都有:synchronized关键字修饰。表示StringBuffer在多线程环境下运行是安全的。
    StringBuilder中的方法都没有:synchronized关键字的修饰,表示StringBuilder在多线程环境下运行是不安全的。

    StringBuffer是线程安全的。
    StringBuilder是非线程安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值