JavaSE进阶 第七章 常用类 (二) StringBuffer与StringBuilder

1.StringBuffer的定义与使用

由于java中字符串是不可变的,需要对字符串频繁拼接是会产生新字符串,占用大量的方法区内存
可以使用java.lang下的StringBuffer和StringBuilder

//创建一个初始化容量为16个byte[]数组。(字符串缓冲区对象)
StringBuffer stringBuffer = new StringBuffer();
//拼接字符串使用append()方法
stringBuffer.append("a");
stringBuffer.append(3.14);
stringBuffer.append(true);
//append方法底层进行追加时,如果byte数组满了,会自动扩容

优化StringBuffer的性能:创建StringBuffer对象时给定一个初始化容量,减少底层扩容次数。
即给一个合适的初始化容量,提高程序的执行效率

StringBuffer sb = new StringBuffer(100);
sb.append("hello");
sb.append("world");

2.StringBuffer与StringBuilder的区别

  • StringBuffer中的方法都有“synchronized”关键字修饰,表示StringBuffer在多线程环境下运行是安全的
  • StringBuilder中的方法没有“synchronized”关键字修饰,表示StringBuilder在多线程环境下运行是不安全的

3.试题

3.1String不可变得原因

源代码中,String类中有一个byte[]数组,这个数组采用了final修饰。而数组一旦创建长度不可变,并且被final修饰后的引用一旦指向某个对象后,不可以再指向其他对象,所以String是不可变的

3.2StringBuffer与StringBuilder可变的原因

源代码中,StringBuffer/StringBuilder内部是一个byte[]数组,这个byte[]数组没有被final修饰,StringBuffer/StringBuilder的初始化容量为16,当存满之后会进行扩容,调用了数组拷贝的System.arraycopy()。所以StringBuffer/StringBuilder适合与使用字符串的频繁拼接操作

传送门

上一章:JavaSE进阶 第七章 常用类 (一) String
下一章:JavaSE进阶 第七章 常用类 (三) 基本数据类型对应的8个包装类

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值