请尽量用BufferString进行字符拼接
来源:互联网 发布:数据调查公司 编辑:程序博客网 时间:2024/05/16 07:54
最近写hql语句时,用到很多字符的链接,产生了对String和StringBuffer的思考。
String类用来表示那些创建后就不会再改变的字符串,它是immutable的。
StringBuffer类用来表示内容可变的字符串,并提供了修改底层字符串的方法。
当我们进行字符拼接时,请使用StringBuffer类而非String类,因为前者将比后者快上百倍。的确,在程序的太多场合我们都会进行字符串拼接工作,简单的代码示例如下:
String hql="select c from OaArchivesSort c ";
hql+=" order by c.id asc";
如果用StringBuffer类的话,代码如下:
StringBuffer hql= new StringBuffer(" select c from OaArchivesSort c ");
hql.append(" order by c.id asc ");
从表面看来String类只用一个加号(+)便完成了字符串的拼接,而StringBuffer类却要调用一个append()方法,是否实现起来更简洁呢?其实不然,让我们了解一下程序运行内部发生了哪些事情:
经编译后程序的bytecode(字节码)展示出了实质: 在用String类对象直接拼接时,JVM会创建一个临时的StringBuffer类对象,并调用其append()方法完成字符串的拼接,这是因为 String类是不可变的,拼接操作不得不使用StringBuffer类(并且--JVM会将"select c from OaArchivesSort c"和" order by c.id asc "创建为两个新的String对象)。之后,再将这个临时StringBuffer对象转型为一个String,代价不菲!可见,在这一个简单的一次拼接过程中,我们让程序创建了四个对象:两个待拼接的String,一个临时StringBuffer,和最后将StringBuffer转型成为的String--它当然不是最初的hql了,这个引用的名称没变,但它指向了新的String对象。
而如果直接使用StringBuffer类,程序将只产生两个对象:最初的StringBuffer和拼接时的String("order by c.id asc"),也不再需要创建临时的StringBuffer类对象而后还得将其转换回String对象。
可以想象,当我们的字符串要被循环拼接若干段时,用String类直接操作会带来多少额外的系统开销,生成多少无用的临时StringBuffer对象,并处理多少次无谓的强制类型转换哪。
- 请尽量用BufferString进行字符拼接
- BufferString
- SQL查询请尽量用exists
- 使用iconfont时进行拼接字符图标
- SQL进行字符的拼接与拆分
- 用ps进行图像拼接
- java用特殊字符拼接文字
- 用StringBuffer/StringBuilder对字符串进行拼接
- 尽量不用奇异数,如果真想用,请用真正的奇异数
- 字符拼接方法
- 简单的字符拼接
- c++ 字符 数值拼接
- 宏拼接字符
- awk 拼接字符
- OpenCV进行视频拼接
- String & BufferString的区别
- 字符谜题9:尽量不要用块注释,尤其是里面有嵌套注释掉情况
- ajax提交时data尽量不要用&组装字符串的形式,特殊字符会出错
- Tomcat(5.0.X,5.5.X,6.0.X版本)数据源配置
- LESSON 1 BEING A HACKER
- WPF/Silverlight深度解决方案:(十七)GPU硬件加速下Silverlight超性能动画实现(上)
- CListCtrl 一些使用技巧(更新中....)
- 深度探索C++对象模型 关于对象的笔记
- 请尽量用BufferString进行字符拼接
- 基于maven和hudson打造持续集成环境
- Spring MVC学习(一)
- 笔记本RUN VM 速度慢解决
- 25.212---复用和信道编码
- 在ASP.NET中利用SlickUpload上传大文件(续)
- 收藏Flex 打印预览
- 程序员面试题之从字节截断谈起
- 晨思【戴旭】