Java的String与StringBuffer、StringBuilder的性能比较
2012-06-08 14:36
531 查看
1.先看下测试代码
测试代码如下:(这个是借鉴别人的)
测试的机器配置:
2.看下测试结果:
时间单位:毫秒
由此可见,当需要对字符串做修改的时候,如果改动频繁,次数太大,用StringBuffer是不二的选择。
但是,当次数操作1000000次时,OutOfMemoryError了。
有兴趣的javaer可以自己测试下。
特意看了下这2个类的源码,发现时同一个人在同一时间写的,而StringBuilder是1.5才加入的:
StringBuilder中的操作是没有进行同步的。所以比StringBuffer性能要更高一些。
图1:
图2:
这个人是如何设计的了?
以此共勉!!!!!!!!
测试代码如下:(这个是借鉴别人的)
package com.gbicc.thread; public class StringTest { private void funBuffer() { String tempstr = "abcdefghijklmnopqrstuvwxyz"; int times = 1500000; long lstart2 = System.currentTimeMillis(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < times; i++) { sb.append(tempstr); } long lend2 = System.currentTimeMillis(); long time2 = (lend2 - lstart2); System.out.println(time2); } private void funBuilder() { String tempstr = "abcdefghijklmnopqrstuvwxyz"; int times = 1500000; long lstart2 = System.currentTimeMillis(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < times; i++) { sb.append(tempstr); } long lend2 = System.currentTimeMillis(); long time2 = (lend2 - lstart2); System.out.println(time2); } private void funStr() { String tempstr = "abcdefghijklmnopqrstuvwxyz"; int times = 100; long lstart1 = System.currentTimeMillis(); String str = ""; for (int i = 0; i < times; i++) { str += tempstr; } long lend1 = System.currentTimeMillis(); long time = (lend1 - lstart1); System.out.println(time); } /** * @param args */ public static void main(String[] args) { StringTest test = new StringTest(); test.funBuilder(); test.funBuffer(); test.funStr(); } }代码说明:代码里有3个函数,一个是测试String的,一个是测试StringBuffer的,一个是测试StringBuilder的,功能就是让24个英文字母相加。
测试的机器配置:
2.看下测试结果:
时间单位:毫秒
次数 | String花费时间 | StringBuffer花费时间 | StringBuilder花费时间 |
1000 | 47 | 0~1 | 0~1 |
5000 | 1187 | 2 | 1 |
10000 | 5634 | 2 | 1 |
12000 | 8801 | 3 | 3 |
15000 | 16347 | 3 | 3 |
18000 | 27202 | 4 | 4 |
20000 | 35911 | 4 | 4 |
50000 | ...... | 12 | 12 |
100000 | ....... | 31 | 30 |
但是,当次数操作1000000次时,OutOfMemoryError了。
有兴趣的javaer可以自己测试下。
特意看了下这2个类的源码,发现时同一个人在同一时间写的,而StringBuilder是1.5才加入的:
StringBuilder中的操作是没有进行同步的。所以比StringBuffer性能要更高一些。
图1:
图2:
这个人是如何设计的了?
以此共勉!!!!!!!!
相关文章推荐
- Java的String与StringBuffer、StringBuilder的性能比较
- 朝花夕拾:Java中String,StringBuffer,StringBuilder使用方法以及异同比较
- Java String、StringBuffer、StringBuilder比较
- 朝花夕拾:Java中String,StringBuffer,StringBuilder使用方法以及异同比较
- Java中字符串操作类String、StringBuffer、StringBuilder区别及性能对比测试
- Java中String和StringBuilder性能比较
- Java之String,StringBuffer,StringBuilder比较
- java语言基础入门——String、StringBuffer、StringBuilder的比较
- java中String、StringBuffer、StringBuilder区别与比较
- java中String、StringBuilder和StringBuffer效率的比较
- String,StringBuffer,StringBuilder的性能比较
- Java String StringBuffer StringBuilder比较
- JAVA回顾巩固之String、StringBuilder、StringBuffer结合源码比较
- Java基础回顾_String_StringBuffer_StringBuider性能比较
- String,StringBuffer,StringBuilder性能比较
- java基础巩固系列(十):String、StringBuffer、StringBuilder的使用与比较
- java基础:string与stringBuilder性能比较
- 【Java基础】Java常见几组概念的比较(String、StringBuilder、StringBuffer、HashMap、HashTable
- Java基础学习总结(65)——Java中的String,StringBuilder和StringBuffer比较
- 【Java】StringBuilder、StringBuffer、String 比较