编程之路小细节-字符串拼接以及优化的浅析

来源:互联网 发布:电影《人工智能》 编辑:程序博客网 时间:2024/06/03 20:07

工作中遇到关于程序功能的优化问题,技术主管要求尽可能在保留原有功能的情况下,进行程序中数据查询功能的代码优化。源代码查看完毕后,我决定从局部变量,加载优化,循环遍历,重复计算,应用创建,字符串的拼接等几个方面进行代码块的优化,以便更好的服务于用户的数据查询体验。


首先,在进行循环遍历的优化时,我刻意的去写了段代码测试了一下,先上图再说:


上图表示对象的创建在循环外部。



上图表示对象的创建在循环内部。

由以上两图比较可以得到结果:在循环中,把创建对象的动作放在其外部,会极大地提高软件的性能。因为如果将创建对象的动作放在循环内部的话,会在每次循环的时候,都将创建一个新的对象,这样会增加软件的运行时压力,也会浪费大量的存储空间。


然后,在字符串拼接的优化中,我发现StringBuilder类的明显优势。让我们先来了解一下String、StringBufferStringBuilder的之间的关系以及性能。

String:不可改变的量,即字符串创建后不可修改。

StringBuffer:可变字符串序列,即StringBuffer对象的值是可变的。

StringBuilder:可变字符串序列,即StringBuilder对象的值是可变的。

三者在性能方面:(大部分情况下)String < StringBuffer < StringBuilder。其原因是 String 操作是创建新的String对象,而StringBuffer和StringBuiler只是一个字符数组的扩容。

StringBuffer 和 StringBuilder 的不同点很重要,就是线程安全性。StringBuffer是线程安全的,StringBuilder是非线程安全的,这也是有失必有得吧。


废话也这么多了,主要是StringBuilder类的机制是通过扩展字符数组而进行数据存储,而常用的字符串拼接符号“ + ”则是相当消耗内存和性能的。以下为String类和StringBuilder类的代码测试图:


上图为String类的字符串拼接代码测试效果图。



上图为StringBuilder类的字符串拼接代码测试效果图。

通过上面两张图表展示内容的对比,可以看出:字符串拼接的功能上StringBuilder类的效率远远高于String类。


工作中的一点一滴,都是进步的基石。一步一个脚印,努力向前。