String StringBuffer StringBuilder

注:拼接字符串的五种方法

  • String a = “c” + “d”; //内部把String转换为StringBuilder调用append()方法,由于Sting对象每拼接一次要创建一个对象,频繁修改字符串不建议使用
  • new StringBuilder.append(“a”).append(“d”);//频繁拼接字符串,建议使用
  • new StringBuffer.append(“a”).append(“d”);//加上synchronized线程同步
  • StringUtils.join(new String(“a”),",");
  • new String(“a”).concat(“d”);

String

  1. String是一个被final修饰的最终类,hash没有被final修饰,每次修改字符串都会创建对象
    注:String中拼接字符串“+”,其实是把String对象转换为StringBuilder对象然后调用StringBuilder.append()方法进行拼接

StringBuffer

  1. StringBuffer是为了解决频繁字符串拼接而出现的类
  2. 提供了append和add方法,将字符串添加到已有序列的末尾或者指定位置
  3. 一个线程安全的可修改的字符序列,所有修改数据的方法都加上了synchronized
  4. 继承了AbstractStringBuilder,底层是可修改的char[](JDK1.9之后为byte[])

StringBuilder

  1. JDK1.5发布
  2. 去掉了线程安全的StringBuffer
  3. 继承了AbstractStringBuilder,底层是可修改的char[](JDK1.9之后为byte[])

String StringBuilder StringBuffer的使用

  1. 速度从快到慢 StringBuilder StringBuffer String
  2. 大量字符串拼接且知道字符串大小,使用new StringBuffer或者StringBuilder的时候设置好capacity,避免多次扩容

字符串常量池

  1. String aa = “aa”;去检查常量池是否有此字符串,若存在则直接引用,反之在常量字符串再放入常量池
  2. String aa = new String(“aa”);直接在堆中创建对象,不会放入常量池

总结

  1. 在字符串不经常改变的情况下使用String
  2. 单线程且频繁的拼接字符串操作使用StringBuilder(比如JSON的封装)
  3. 多线程且频繁的拼接字符串操作使用StringBuffer(http参数解析和封装等)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值