Java字符串拼接VS



看到上面的提示时是不是有点疑问,对于初学Java的人来说,在学习String的时候,肯定有无数个人和我们讲过,“尽量不要使用+拼接字符串,效率不好,应该使用append,你自己循环拼接个十万次自己瞧瞧就知道了” 为什么这里连IDEA都提醒我们可以用+来代替append呢。

结论:
Java中+拼接字符串并不是人们口中所说的那样臭名昭著,人们口中所说的效率低下指的是在循环中的+拼接,只是不知道从哪天开始完全变了味。如果你能保证在一条语句中把字符串或者字符串变量全部拼接完而不断开,那+拼接根本没有任何缺点,编译器还会有一些优化,如果拼接的全是字符串字面量,那效果更好,它们直接就变成了一个完整的字符串。并且+书写简洁方便,可读性强。直接用StringBuilder的append也没有问题,只是不要append()和+混合使用。

如果用+拼接字符串中间不断,那么用+拼接的效率与StringBuffer或StringBuilder使用append的效率相当,甚至在编译器的优化下效率反而会更高。因为第一次遇到+拼接的时候,编译器会自动创new 一个 StringBuilder 然后只要+不断就会一路append下去。

String采用连接运算符(+)效率低下,都是上述循环、大批量数据情况造成的,每做一次"+"就产生个StringBuilder对象,然后append后就扔掉。下次循环再到达时重新产生个StringBuilder对象,然后append字符串,如此循环直至结束。如果我们直接采用StringBuilder对象进行append的话,我们可以节省创建和销毁对象的时间。如果只是简单的字面量拼接或者很少的字符串拼接,性能都是差不多的。

参考: Java中对于+和append拼接字符串效率的误解


评论