资源预览内容
第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
亲,该文档总共3页全部预览完了,如果喜欢就下载吧!
资源描述
每次拼接字符串的时候用习惯了String,从来没想过用其他的class,最近看了看java性能的一些介绍书籍,很多东西以前都没想到,哎,还是经验太少。 拼接字符串,大致有3个class可以用,他们是String, StringBuffer,StringBuilder, StringBuilder是1.5中来代替StringBuffer的,我用的检验方法很简单, 就是Java代码 1 long start = System.currentTimeMillis(); 2 /code here. 3 long end = System.currentTimeMillis(); 4 long time = end -start; 5 System.out.println(time); 其实我也不知道使用别的什么其他方法,许多工具可以检查性能,不过我基本没怎么用过。 “+=”看起来效率高,比较短小,其实性能远不如append,看代码 Java代码 6 public class StringTest 7 8 public static void main(String args) 9 10 long start = System.currentTimeMillis(); 11 String s = new String(hello); 12 for (int i = 0; i 15000; i+) 13 14 s+=i; 15 16 long end = System.currentTimeMillis(); 17 long time = end -start; 18 System.out.println(用String +=拼接字符串的时间+time); 19 20 long start1 = System.currentTimeMillis(); 21 StringBuffer sb = new StringBuffer(hello); 22 for (int i = 0; i 15000; i+) 23 24 sb.append(i); 25 26 long end1 = System.currentTimeMillis(); 27 long time1 = end1 -start1; 28 System.out.println(用StringBuffer append拼接字符串的时间+time1); 29 30 long start2 = System.currentTimeMillis(); 31 StringBuilder builder = new StringBuilder(hello); 32 for (int i = 0; i 15000; i+) 33 34 builder.append(i); 35 36 long end2 = System.currentTimeMillis(); 37 long time2 = end2 -start2; 38 System.out.println(用StringBuilder append拼接字符串的时间+time2); 39 40 41 打印结果: 42 用String +=拼接字符串的时间3984 43 用StringBuffer append拼接字符串的时间31 44 用StringBuilder append拼接字符串的时间0 当然这个时间取决于你计算机的速度,不过可以看出,Buffer和Buildr相差无几,而String就慢许多了 原因: 查看程序的字节码,你就会明白了,原因是String类本身是final类型,他不能更改,所以拼接时,它会使用StringBuffer,并调用 append,之后再调用toString方法,每次都要这样,StringBuffer再转换成String时,代价是很大的。这是它慢的主要的一些原 因。不仅创立了临时对象StringBuffer,还每次完后再要转成String。 而 StringBuilder的出现就是用来替换StringBuffer的,所以应该尽可能StringBuilder来拼接,将转为String的数量减至最少,降低对象的创建数,大大提高性能。 public class Test /* * param args */ public static void main(String args) / TODO Auto-generated method stub long start = System.currentTimeMillis(); String s = new String(hello); for (int i = 0; i 15000; i+) s+=拼接字符串的时间; long end = System.currentTimeMillis(); long time = end -start; System.out.println(用String +=拼接字符串的时间+time); long start1 = System.currentTimeMillis(); StringBuffer sb = new StringBuffer(hello); for (int i = 0; i 15000; i+) sb.append(拼接字符串的时间); long end1 = System.currentTimeMillis(); long time1 = end1 -start1; System.out.println(用StringBuffer append拼接字符串的时间+time1); long start2 = System.currentTimeMillis(); StringBuilder builder = new StringBuilder(hello); for (int i = 0; i 15000; i+) builder.append(拼接字符串的时间); long end2 = System.currentTimeMillis(); long time2 = end2 -start2; System.out.println(用StringBuilder append拼接字符串的时间+time2); = = 用String +=拼接字符串的时间25406 用StringBuffer append拼接字符串的时间0 用StringBuilder append拼接字符串的时间15
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号