string字符串拼接对性能地影响

string字符串拼接对性能地影响

ID:28971046

大小:145.62 KB

页数:8页

时间:2018-12-15

string字符串拼接对性能地影响_第1页
string字符串拼接对性能地影响_第2页
string字符串拼接对性能地影响_第3页
string字符串拼接对性能地影响_第4页
string字符串拼接对性能地影响_第5页
资源描述:

《string字符串拼接对性能地影响》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实用标准文案String、StringBuffer&StringBuilder字符串拼接对性能的影响Author:苏康福date:2013-3-111.StringString字符串是常量;它们的值在创建之后不能更改。String类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写。Java语言提供对字符串串联符号("+")以及将其他对象转换为字符串的特殊支持。字符串串联是通过StringBuilder(或StringBuffer)类及其append方法实现的。字符串转换是通过t

2、oString方法实现的,该方法由Object类定义,并可被Java中的所有类继承。《JDK6》String类中每一个看起来会修改字符串值的方法,实际上都是创建一个全新的String对象,以包含修改后的字符串内容。《JavaThinking》String对象是不可变的,具有只读特性,指向它的任何引用都不可能改变它的值。Stringa=“Kangfu”;Stringb=a;b+=“Su”;Stringc=a.toUpperCase();a、b、c各指向不同的对象。String的重载操作符“+”和“+=”,可以用来链接字符串。见实验方法一。2.Stri

3、ngBufferStringBuffer,线程安全的可变字符序列。可将字符串缓冲区安全地用于多个线程。可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致。从JDK5开始,为该类补充了一个单个线程使用的等价类,即StringBuilder。与该类相比,通常应该优先使用StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。《JDK6》3.StringBuilderStringBuilder,一个可变的字符序列。此类提供一个与String

4、Buffer兼容的API,但不保证同步。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快。StringBuilder允许预先指定大小。如果知道最终字符串大概长度,那预先指定StingBuilder的大小可以避免多次重新分配缓冲。《JDK6》4.实例分析定义Java类(见string/test/StringConcatenation.java)精彩文档实用标准文案1)方法一源码:Jvm字节码:从字节码可看出,类

5、似这种情况的定义,java编译器直接把拼接表达式看成单个String变量。2)方法二源码:Jvm字节码:精彩文档实用标准文案从字节码中可看出,类似这种情况的定义(String变量的定义中带有其他对象参数表达式),java编译器自动创建了一个StringBuilder变量来构造结果。1)方法三源码:Jvm字节码:精彩文档实用标准文案从字节码中可看出,循环体从第9行开始到38行结束,每次运行result+="SELECT";都会newStringBuilder()一次,过程中产生大量需要垃圾回收的中间对象。1)方法四源码:Jvm字节码:精彩文档实用标准

6、文案从字节码中可看出,循环体从第14行开始到30行结束,循环体内直接调用append方法即可,代码干净整洁,效率也高。四个方法运行结果,见下图。根据运行环境不同,时间也可能不同。但是大概能看出第三个方法运行结果比较糟糕。(两个循环次数为1000结果图)精彩文档实用标准文案(两个循环次数为10000结果图)1.结论案例说明实施说明运行时间无参数使用string“+”拼接java编译器直接把拼接表达式看成单个String变量。0带参数使用string“+”拼接String变量的定义中带有其他对象参数表达式,java编译器自动创建了一个StringBui

7、lder变量来构造结果,再调用其toString方法。<1ms循环中使用string“+”拼接每循环一次拼接,都会newStringBuilder()一次,过程中产生大量需要垃圾回收的中间对象,性能很糟糕。循环1000次运行56ms;循环次数10000次运行时间2638ms循环中使用StringBuilder的append方法拼接循环体内直接调用append方法,代码干净整洁,效率也高。<1ms通过如上4个例子,得出结论:Ø如果字符串拼接操作比较简单(类似方法一、二),那采用String+操作符或StringBuilder的append方法,对性能

8、影响不明显,使用哪种方式根据具体情形而定。类似方法一(或者+更少)的情况使用String+操作符更简洁,类似方法二使用St

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。