博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中String和StringBuffer对于拼接运算中效率的对比 ...
阅读量:6273 次
发布时间:2019-06-22

本文共 2129 字,大约阅读时间需要 7 分钟。

Java中String和StringBuffer对于拼接运算中效率的对比

String类型在java中是immutable,意思就是不可变的,每次对String进行拼接操作,实际在jvm中都是new了一个新的String,随着String的new的次数越多,会造成虚拟机速度下降。

StringBuffer的内部实际是一个字符数组,对于不同的jdk可以使用以下方法查看其实际的大小和容量(请参考下面的代码),注意:这是两个不同的概念,具体请参考API的文档。

String str1 = "redpig";StringBuffer sb = new StringBuffer(str1);System.out.println(sb.length()); //内容长度System.out.println(sb.capacity());//总空间

如果每次随机生成10个字符(仅限于大小写字母和数字),重复10000次,此时可以清楚看到String和StringBuffer的运行效率。

import java.util.Random;public class TestStrAndStrBuf {    private static char[] characterPool = new char[62];    static {        char c = 0;        int i = 0;        for (c = 'a'; c < 'z'; c++, i++)            characterPool[i] = c;        for (c = 'A'; c < 'Z'; c++, i++)            characterPool[i] = c;        for (c = '0'; c < '9'; c++, i++)            characterPool[i] = c;    }    public static void main(String[] args) {        appendString(10000, 10);        appendStringBuffer(10000, 10);    }    public static char[] getRandomCharacters(int charactersLength) {        char[] chars = new char[charactersLength];        Random r = new Random();        for (int i = 0; i < charactersLength; i++)            chars[i] = characterPool[Math.abs(r.nextInt()) % characterPool.length];        return chars;    }    public static void appendString(int times, int charactersLength) {        String string = new String();        long startTime = System.currentTimeMillis();        for (int i = 0; i < times; i++)            string += String.valueOf(getRandomCharacters(charactersLength));        long endTime = System.currentTimeMillis();        System.out.println("Run time is " + (endTime - startTime));    }    public static void appendStringBuffer(int times, int charactersLength) {        StringBuffer stringBuffer = new StringBuffer();        long startTime = System.currentTimeMillis();        for (int i = 0; i < times; i++)            stringBuffer.append(getRandomCharacters(charactersLength));        long endTime = System.currentTimeMillis();        System.out.println("Run time is " + (endTime - startTime));    }}

不同的硬件和软件运行出来的结果有所区别,本机中的效果如下:

_

所以,针对字符频繁改动的应用中,请使用StringBuffer!

转载地址:http://qwmpa.baihongyu.com/

你可能感兴趣的文章
solr-4.10.4部署到tomcat6
查看>>
切片键(Shard Keys)
查看>>
淘宝API-类目
查看>>
virtualbox 笔记
查看>>
Git 常用命令
查看>>
驰骋工作流引擎三种项目集成开发模式
查看>>
SUSE11修改主机名方法
查看>>
jdk6.0 + Tomcat6.0的简单jsp,Servlet,javabean的调试
查看>>
Android:apk签名
查看>>
2(2).选择排序_冒泡(双向循环链表)
查看>>
MySQL 索引 BST树、B树、B+树、B*树
查看>>
微信支付
查看>>
CodeBlocks中的OpenGL
查看>>
短址(short URL)
查看>>
C++零基础教程(一)——何谓编程
查看>>
第十三章 RememberMe——《跟我学Shiro》
查看>>
mysql 时间函数 时间戳转为日期
查看>>
索引失效 ORA-01502
查看>>
Oracle取月份,不带前面的0
查看>>
Linux Network Device Name issue
查看>>