String,StringBuilder性能对照

import java.util.Date;

import java.util.UUID;

/**

* 測试String,StringBuilder性能,推断什么时候改用String,什么时候该用StringBuilder

* 測试结果

* String              拼接測试,測试长度10000,測试字符串数组长度30,完毕时间721

StringBuilder 拼接測试,測试长度10000,測试字符串数组长度30,完毕时间315

String              拼接測试,測试长度10000,測试字符串数组长度10,完毕时间301

StringBuilder 拼接測试,測试长度10000,測试字符串数组长度10,完毕时间124

String              拼接測试,測试长度10000,測试字符串数组长度5,完毕时间237

StringBuilder 拼接測试,測试长度10000,測试字符串数组长度5,完毕时间68

String              拼接測试,測试长度10000,測试字符串数组长度50,完毕时间1169

StringBuilder 拼接測试,測试长度10000,測试字符串数组长度50,完毕时间504

String     拼接測试,測试长度10000,測试字符串数组长度2,完毕时间188

StringBuilder 拼接測试,測试长度10000,測试字符串数组长度2,完毕时间31

String              拼接測试,測试长度20000,測试字符串数组长度2,完毕时间253

StringBuilder 拼接測试,測试长度20000,測试字符串数组长度2,完毕时间59

*

* 这几组至少是2倍以上的时间差距,

* 当然小范围的拼接差点儿时间都是能够忽略不计的,可是你假设作为工具类或者大范围的拼接不妨用StringBuilder,哪怕仅仅是拼接两个字符串

* @author JueYue

*

*/

public class StringTest {

public static void main(String[] args) {

int testLength = 10000;

String[] arr = new String[2];

Date start = new Date();

String str = "";

for (int i = 0; i < testLength; i++) {

str = "";

for (int j = 0; j < arr.length; j++) {

str += UUID.randomUUID().toString();

}

}

System.out.println("String 拼接測试,測试长度" + testLength + ",測试字符串数组长度"

+ arr.length + ",完毕时间"

+ (new Date().getTime() - start.getTime()));

start = new Date();

StringBuilder sb;

for (int i = 0; i < testLength; i++) {

sb = new StringBuilder();

for (int j = 0; j < arr.length; j++) {

sb.append(UUID.randomUUID().toString());

}

}

System.out.println("StringBuilder 拼接測试,測试长度" + testLength + ",測试字符串数组长度"

+ arr.length + ",完毕时间"

+ (new Date().getTime() - start.getTime()));

}

}

时间: 2024-08-04 14:10:35

String,StringBuilder性能对照的相关文章

String,StringBuilder性能对比

import java.util.Date; import java.util.UUID; /** * 测试String,StringBuilder性能,判断什么时候改用String,什么时候该用StringBuilder * 测试结果 * String              拼接测试,测试长度10000,测试字符串数组长度30,完成时间721 StringBuilder 拼接测试,测试长度10000,测试字符串数组长度30,完成时间315 String              拼接测试,

不同Framework下StringBuilder和String的性能对比,及不同Framework性能比(附Demo)

本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 阅读目录 介绍 环境搭建 测试用例 MSDN说明 我的理解 Demo下载 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 介绍   自己对String和StringBuilder的处理机制略懂,大胆的设想下两者的性能对比会出现什么样的令人意外的

java String、String.concat和StringBuilder性能对比

看到网上有人已经做过对比,并且贴出了代码,然后我运行了之后发现跟我分析的结论差距很大.发现他的代码有个问题,UUID.randomUUID() 首次调用耗时会很高,这个耗时被计算给了String,这对String是不公平的. 原始代码参见:http://www.codes51.com/article/detail_99554.html 修改后的测试代码如下: import java.util.Date; import java.util.UUID; public class StringTest

String, StringBuilder及StringBuffer的区别

在java中,String, StringBuilder及StringBuffer经常被用来处理字符串操作. 下表列出它们的异同点: String StringBuffer StringBuilder 是否可继承 否(final) 否(final) 否(final) 是否长度可变 否 是 是 是否线程安全 ---------- 是 否 拼接效率 低 中 高 一般情况下,使用String,StringBuilder比较多.因为字符串的拼接很少会涉及到多线程,所以StringBuffer用的较少.先

String, StringBuilder 与StringBuffer的区别与联系

1.区别 (1)String构建的对象不能改变,每次对String进行操作时,如两个String相加,需要新建一个String对象,然后容纳最终的结果. 而StringBuilder与StringBuffer构建的对象可以随时在修改其内容,而无需生成新的对象.一般新建一个对象是会生成16个字节的空间,之后根据需要再增加空间. 由于一般新构建一个对象涉及分配内存空间分配.无引用对象过多时的垃圾回收等,因此,对于操作频繁的字符串需使用StringBuilder或StringBuffer. (2)St

String,StringBuilder的方法,伪随机Random类

import java.nio.charset.Charset; public class StringDemo { public static void main(String[] args) { byte[]bt={'a','b','c'}; // String(byte[]bt,Charset charset); // 该构造方法根据给定的byte数组和字符集组成一个新的String对象 Charset charset=Charset.forName("utf-8"); Stri

String StringBuilder StringBuffer 区别

String StringBuilder StringBuffer 区别: String 字符串常量 (可用于少量数据,变化不大的情况) 最慢 不可变类(每次改变都会引起创建新的String类) StringBuffer 字符串变量 线性安全(可多线程使用) 居于中间 可变类 StringBuilder 字符串变量 非线性安全(不支持并发操作,可单线程使用) 最快 可变类

数组,string,StringBuilder,集合

1.数组的定义,遍历,以及方法 定义:int arr[] = {1,2,3,4,5};//静态初始化 int arr1[]= new int[5];//动态初始化遍历数组: for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } 数组的方法以及属性:length长度; 2.String的定义,遍历,以及方法定义: //方式1 //String(String original):把字符串数据封装成字符串对象 Stri

30天C#基础巩固------this,base,string中的方法,StringBuilder性能

这里主要是记录下自己学习笔记,希望有个地方在以后可以看到自己走过的路. 关于之前多态的知识有一个口诀,很好理解里面的override和new,virtual关键字. "new则隐藏,over重写,隐藏看类型,重写只管新" 面向对象的三大特征:封装,继承,多态. 非面向对象的特征---静态 静态一般的是使用的是方法,很少有字段. 下面是修饰符的图片,关于修饰符这个要在项目中使用,慢慢的理解. 一:this和base的区别. 这两个都是在我们进行开发经常使用的,关于this代表类的本身,我