StringBuilder的append方法内用+号拼接和链式拼接的区别

按了idea的快捷键优化后修改为链式append,这两者的区别在哪里,对内存有什么影响?链式append是否更优?

这个你写的就有点问题,使用StringBuilder,就是为了使用append的,防止创建过多的String,产生垃圾, 因为String是final类型的(可以进入源码看看),每次创建都是一个新的。相当于每多一个‘+’ ,就会多创建一个临时的无用的字符串的。

      结果你在里面使用加号,相当于创建了几个字符串,这些字符串会在常量池,堆中创建,然后,用完还要销毁。你这样写,不仅没有减轻JVM的负担,反而还要多创建一个StringBuilder,最终可能还要转成String,相当于饶了一圈,本来快到地点了,你又再绕两圈,回到原点,重新来,老铁,路走窄了啊

感觉回答还行的话,可采纳~

你用了StringBuilder的话用 “+” 进行拼接,底层还是会给你改为 append() 进行拼接的。所以IDEA会直接给你进行优化。如果是在括号外面,几个常量的拼接,存放在常量池。用StringBuilder进行拼接,不会存进常量池。

StringBuilder一般不用拼接吧,一般就用append方法,效率更高。

实现的效果是一样的。要说性能的话,肯定是第一种方式更好了。第一种方式直接是常量,第二种方式,通过调用append方法,底层通过char字符的方式进行内容的拼接。

你的两种写法不同点只是在于如下:
String sql="where card_id="+cardId+";";
String sql2= sb.append("where card_id=").append(cardId).append(";").toString();

这性能问题,不是很明显吗。明明就是+可以解决的问题,为啥要用到append()方法呢,这不是多此一举吗。


 

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y