何时可以用 + 拼接字符串,何时不可以用用 + 拼接字符串?

何时可以用 + 拼接字符串,何时不可以用用 + 拼接字符串?


前言

我们做 Java 程序猿/媛 以来,不管是工作当中,还是面试过程中,都知道:字符串拼接不能用 String,要用 StringBuilder 或者是 StringBuffer,以至于它们都被滥用了。

StringBuilder、StringBuffer 简称:SB,下文统一用 SB 代替。

SB它们都是可变的字符串,它们之间的区别也是 Java 初中级面试战场上出现几率十分高的一道题,上场率没有 90% 也有 80% 吧。

这两个的具体区别请看这篇文章:为什么需要用stringbuffer或者StringBuilder去拼接字符串——而不用string——以及stringbuffer的基本了解

字符串拼接一定要用 SB 吗?为什么不能用 + ?能不能用 + ?什么时候可以用 + ?


什么时候不能用 +

通过多个表达式完成一个字符串拼接操作。

private void test1() {
    String blog = "https://blog.";
    String str = www;
    str += "csdn.net";
    str += "/Mrs_chens/article/list/14";
}

我们在代码中拼接了两次,也就是说每一次拼接操作都会创建一次 StringBuilder。频繁创建对象是有性能开销的,这也是为什么我们常说的字符串不能用 + 拼接,而要用那两个 SB 拼接了。


什么时候可以用 +

直接将三个字面量的字符串拼接成一个字符串。

private static void test2() {
    String str = "https://blog." + "csdn.net/" + "Mrs_chens";
}

直接从常量池进行取出一个完整的字符串:https://blog.csdn.net/Mrs_chens。在这种情况下是可以用 + 号进行字符串拼接的。

当这种拼接操作演变成我们实际工作当中的某个 SQL 语句拼接的案例,如:

String sql = "SELECT name, sex, age, address"
        + "FROM t_user"
        + "WHERE age > 18";

别说这样不行,这样是行的。

但你要是换成这样就不行了:

String sql = "SELECT name, sex, age, address";
sql += "FROM t_user";
sql += "WHERE age > 18";

这样又回到创建多个 StringBuilder 的时候了。也就是说,在一个表达式中完成字符串拼接是可以用 + 号完成的,因为编译器已经做了优化。


总之

你只需要记住这两点:

  1. 在循环和多个表达式中不能 +,频繁创建 SB 性能影响;
  2. 在单个表达式中可以用 +,编译器直接做了优化;

最后

  • 更多参考精彩博文请看这里:《陈永佳的博客》

  • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈永佳

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值