String 拼接那些事儿

String 拼接那些事儿

总结建议

线程安全用StringBuffer;
一般情况用 StringBuilder ;
字符串拼接,通过特定字符分割用StringJoiner ;

String 类型 ,+ 号拼接

String str1 = "a";
str1 = str1 + "b"; 

// 编译后在系统类似于:
// StringBuilder stringBuilder = new StringBuilder();
// stringBuilder.append(str1)
// stringBuilder.append("b")
// stringBuilder.toString();

String 类型 ,append拼接

String str2 = "a";
str2 = str2.concat("b");
// 源码实现:
//  System.arraycopy ---native方法,深拷贝(注意:复杂对象,对象里面的对象是指针)
// 具体实现 1. 新开辟 char[] , 2. copy 源,3. copy 目标,4. 返回

StringBuffer 拼接

StringBuffer str3 = new StringBuffer("a"); 
str3 = str3.append("b");
// 源码注意点:
// 新创建,length 预留+16
// 长度若超过,扩容当前长度*2+2,若还不够,用需要的长度赋值
// 若为NULL,拼接 "null"
// synchronized 的存在,保证了线程安全

StringBuilder 拼接

StringBuilder str3 = new StringBuilder ("a"); 
str3 = str3.append("b");
// 类似StringBuffer ,但是没有加synchronized ,非线程安全

StringJoiner 拼接

StringJoiner str5 = new StringJoiner("-", "start", "end");
str5.add("a");          
str5.add("b");
// 内部用的还是 StringBuilder
// 使用场景 用某个分隔符拼接字符串,可以添加前后缀

Collectors.joining 拼接

 List<String> list = Arrays.asList("A", "B", "C", "D", "[", "]");
 String str6 = list.stream().collect(Collectors.joining(";", "prefix", "suffix"));
 // 内部用的还是 StringJoiner
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值