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

本文介绍了在不改变程序功能的前提下,如何对数据查询功能进行代码优化。主要从循环遍历和字符串拼接两个方面进行了详细阐述,并通过示例对比了不同实现方式的性能差异。

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


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


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



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

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


然后,在字符串拼接的优化中,我发现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类。


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

v-bind和{{}}都可以用来对数据进行绑定,但是二者有区别。v-bind是通过指令将数据绑定到元素的上,而{{}}是通过插值表达式将数据显示在文本节点中。 引用中提到,v-bind在进行数据绑定时会完全替换属性的值,所以如果你想要进行字符串拼接,v-bind可能不是很好的选择。举个例子,如果我们有一个变量`text`,我们想将它与一个固定的字符串拼接后赋值给一个元素的属性,使用v-bind做不到。比如: ``` <div v-bind:class="'my-class ' + text"></div> ``` 这样写是错误的,因为v-bind会将整个属性值替换为`'my-class ' + text`,而不是进行字符串拼接。 然而,使用插值表达式{{}}就可以很方便地进行字符串拼接,例如: ``` <div class="my-class {{ text }}"></div> ``` 这样,`text`的值会被动态地拼接到class属性中。 综上所述,如果你需要进行字符串拼接,使用插值表达式{{}}会更方便。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [深入浅析AngularJs模版与v-bind](https://download.youkuaiyun.com/download/weixin_38590738/14827076)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [vue中的v-model](https://blog.youkuaiyun.com/qq_44439022/article/details/107171764)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Vue项目上绑定变量与字符串拼接-案例](https://blog.youkuaiyun.com/JackieDYH/article/details/124180196)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值