Java关键字系列 — String、StringBuffer、StringBuilder的区别和使用

java中String、StringBuffer、StringBuilder是编程中经常使用的字符串类,具体说原理的话,我们可以用两个例子来说明两种背景下的情况。

变量相加

案例走起,运算str1、str2和str3的拼接
直接相加实际运行,实际效果:
StringBuilder sb1 = new StringBuilder(str1);
sb1.append(str2);
String str = sb1.toString();
StringBuilder sb2 = new StringBuilder(str);
sb2.append(str3);
str = sb2.toString();
使用StringBuffer拼接,实际效果:
synchronized(this){
StringBuffer sb = new StringBuffer(str1);
sb.append(str2);
sb.append(str3);
str = sb.toString();
}
使用StringBuiler拼接,实际效果:
StringBuilersb = new StringBuiler(str1);
sb.append(str2);
sb.append(str3);
str = sb.toString();

执行到最后,我们所需要的内容只有str这一个对象,中间出现的sb*就成为了垃圾回收的目标,所以总结来看,运行效率String < StringBuffer < StringBuiler,但是StringBuiler是线程不安全的。

总结一下,不难得出使用场景

  • 使用String类的场景:在字符串不经常变化的场景中可以使用String类,例如常量的声明、少量的变量运算。
  • 使用StringBuffer类的场景:在频繁进行字符串运算(如拼接、替换、删除等),并且运行在多线程环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装。
  • 使用StringBuilder类的场景:在频繁进行字符串运算(如拼接、替换、和删除等),并且运行在单线程的环境中,则可以考虑使用StringBuilder,如SQL语句的拼装、JSON封装等。

产量相加

如果我们用1万个变量相加,能明显的对比出性能差别,但是当我们做常量相加的时候,那么我们就会发现一个有趣的现象,String的效率最高,这是因为我们的Java8以后做了很大的性能优化,编译器会把这一类的运算转化为最高效的StringBuiler来计算,但是明显String的写法来的更简单、直接、高效。

总结一下

  1. 在进行字符串变量拼接的时候最好是使用StringBuilder,毕竟我们几乎不会遇到多线程字符串拼接
  2. 在进行字符串常量拼接的时候,直接String走起
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值