实现String字符串相加的方法有很多,常见的有直接相加,StringBuilder.append和String.format,这三者的运行效率是有差异的,String是final类型的,每次相加都会new一个

新的String对象,如果这种操作很多的话,很占用很大的内存。而StringBuilder.append方法是在原对象上进行操作,如果长度不够就自行扩展。

测试代码1:

  1. <span style="white-space:pre">    </span>String success_code = "0";
  2. byte splite = 0x01;
  3. private void method1(){
  4. String resultMsg = "";
  5. long time1 = System.nanoTime();
  6. String.format("ErrorCode=%s%cErrorMsg=心跳包接收成功%c", success_code, splite, splite);
  7. long time2 = System.nanoTime();
  8. System.out.println("StringFormat:"+(time2-time1)+"ns");
  9. long time3 = System.nanoTime();
  10. resultMsg = "ErrorCode="+success_code+splite+"ErrorMsg=心跳包接收成功"+splite;
  11. long time4 = System.nanoTime();
  12. System.out.println("String add:"+(time4-time3)+"ns");
  13. long time5 = System.nanoTime();
  14. sb.append("ErrorCode=").append(success_code).append(splite).append("ErrorMsg=心跳包接收成功").append(splite);
  15. long time6 = System.nanoTime();
  16. System.out.println("StringBuilder add:"+(time6-time5)+"ns");
  17. System.out.println("-------------------------------------------------");
  18. }
  19. @Test
  20. public void test1(){
  21. for(int i=0; i<1000; i++){
  22. method1();
  23. }
  24. }
<span style="white-space:pre">	</span>String success_code = "0";

	byte splite = 0x01;

	private void method1(){
String resultMsg = "";
long time1 = System.nanoTime();
String.format("ErrorCode=%s%cErrorMsg=心跳包接收成功%c", success_code, splite, splite);
long time2 = System.nanoTime();
System.out.println("StringFormat:"+(time2-time1)+"ns"); long time3 = System.nanoTime();
resultMsg = "ErrorCode="+success_code+splite+"ErrorMsg=心跳包接收成功"+splite;
long time4 = System.nanoTime();
System.out.println("String add:"+(time4-time3)+"ns"); long time5 = System.nanoTime();
sb.append("ErrorCode=").append(success_code).append(splite).append("ErrorMsg=心跳包接收成功").append(splite);
long time6 = System.nanoTime();
System.out.println("StringBuilder add:"+(time6-time5)+"ns");
System.out.println("-------------------------------------------------");
} @Test
public void test1(){
for(int i=0; i<1000; i++){
method1();
}
}

运行结果:

  1. StringFormat:58025ns
  2. String add:3158ns
  3. StringBuilder add:1579ns
  4. -------------------------------------------------
  5. StringFormat:43026ns
  6. String add:3948ns
  7. StringBuilder add:1974ns
  8. -------------------------------------------------
  9. .....
  10. StringFormat:46973ns
  11. String add:1579ns
  12. StringBuilder add:790ns
  13. -------------------------------------------------
  14. StringFormat:52499ns
  15. String add:1578ns
  16. StringBuilder add:790ns
  17. -------------------------------------------------
  18. StringFormat:43026ns
  19. String add:1579ns
  20. StringBuilder add:790ns
  21. -------------------------------------------------
StringFormat:58025ns
String add:3158ns
StringBuilder add:1579ns
-------------------------------------------------
StringFormat:43026ns
String add:3948ns
StringBuilder add:1974ns
-------------------------------------------------
.....
StringFormat:46973ns
String add:1579ns
StringBuilder add:790ns
-------------------------------------------------
StringFormat:52499ns
String add:1578ns
StringBuilder add:790ns
-------------------------------------------------
StringFormat:43026ns
String add:1579ns
StringBuilder add:790ns
-------------------------------------------------

从上述结果可知,StringBuilder与String直接相加的执行效率都比String.format高, 而StringBuilder的执行效率要比String直接相加要高点。下面针对String,StringBuilder再

做一组测试。

测试代码2:

  1. <span style="white-space:pre">    </span>public void method2(int num){
  2. String text = "";
  3. long beginTime = System.nanoTime();
  4. for(int i = 0; i < num; i++){
  5. text += i;
  6. }
  7. long endTime = System.nanoTime();
  8. System.out.println("String直接相加"+num+"次耗费时间:" + (endTime - beginTime)+"ns");
  9. StringBuilder builder = new StringBuilder("");
  10. beginTime = System.nanoTime();
  11. for(int i = 0; i < num; i++){
  12. builder.append(i);
  13. }
  14. endTime = System.nanoTime();
  15. System.out.println("StringBuilder相加"+num+"次耗费时间:" + (endTime - beginTime)+"ns");
  16. System.out.println("---------------------------------------------------");
  17. }
  18. @Test
  19. public void test2(){
  20. method2(10);
  21. method2(100);
  22. method2(10000);
  23. method2(100000);
  24. }
<span style="white-space:pre">	</span>public void method2(int num){
String text = "";
long beginTime = System.nanoTime();
for(int i = 0; i < num; i++){
text += i;
}
long endTime = System.nanoTime();
System.out.println("String直接相加"+num+"次耗费时间:" + (endTime - beginTime)+"ns");
StringBuilder builder = new StringBuilder("");
beginTime = System.nanoTime();
for(int i = 0; i < num; i++){
builder.append(i);
}
endTime = System.nanoTime();
System.out.println("StringBuilder相加"+num+"次耗费时间:" + (endTime - beginTime)+"ns");
System.out.println("---------------------------------------------------");
} @Test
public void test2(){
method2(10);
method2(100);
method2(10000);
method2(100000);
}

运行结果:

  1. String直接相加10次耗费时间:19737ns
  2. StringBuilder相加10次耗费时间:3553ns
  3. ---------------------------------------------------
  4. String直接相加100次耗费时间:56447ns
  5. StringBuilder相加100次耗费时间:47762ns
  6. ---------------------------------------------------
  7. String直接相加10000次耗费时间:266082677ns
  8. StringBuilder相加10000次耗费时间:999061ns
  9. ---------------------------------------------------
  10. String直接相加100000次耗费时间:45212528095ns
  11. StringBuilder相加100000次耗费时间:3040604ns
  12. ---------------------------------------------------
String直接相加10次耗费时间:19737ns
StringBuilder相加10次耗费时间:3553ns
---------------------------------------------------
String直接相加100次耗费时间:56447ns
StringBuilder相加100次耗费时间:47762ns
---------------------------------------------------
String直接相加10000次耗费时间:266082677ns
StringBuilder相加10000次耗费时间:999061ns
---------------------------------------------------
String直接相加100000次耗费时间:45212528095ns
StringBuilder相加100000次耗费时间:3040604ns
---------------------------------------------------

从测试结果可分析出,StringBuilder的效率是比String高。

再来看一个测试,代码和上面的一样,只是SringBuilder加上个toString

测试代码:

  1. String success_code = "0";
  2. byte splite = 0x01;
  3. private void method1(){
  4. String resultMsg = "";
  5. long time1 = System.nanoTime();
  6. resultMsg = String.format("ErrorCode=%s%cErrorMsg=心跳包接收成功%c", success_code, splite, splite);
  7. long time2 = System.nanoTime();
  8. System.out.println("StringFormat:"+(time2-time1)+"ns");
  9. long time3 = System.nanoTime();
  10. resultMsg = "ErrorCode="+success_code+splite+"ErrorMsg=心跳包接收成功"+splite;
  11. long time4 = System.nanoTime();
  12. System.out.println("String add:"+(time4-time3)+"ns");
  13. long time5 = System.nanoTime();
  14. resultMsg = sb.append("ErrorCode=").append(success_code).append(splite).append("ErrorMsg=心跳包接收成功").append(splite).toString();
  15. long time6 = System.nanoTime();
  16. System.out.println("StringBuilder add:"+(time6-time5)+"ns");
  17. System.out.println("-------------------------------------------------");
  18. }
String success_code = "0";

	byte splite = 0x01;

	private void method1(){
String resultMsg = "";
long time1 = System.nanoTime();
resultMsg = String.format("ErrorCode=%s%cErrorMsg=心跳包接收成功%c", success_code, splite, splite);
long time2 = System.nanoTime();
System.out.println("StringFormat:"+(time2-time1)+"ns"); long time3 = System.nanoTime();
resultMsg = "ErrorCode="+success_code+splite+"ErrorMsg=心跳包接收成功"+splite;
long time4 = System.nanoTime();
System.out.println("String add:"+(time4-time3)+"ns"); long time5 = System.nanoTime();
resultMsg = sb.append("ErrorCode=").append(success_code).append(splite).append("ErrorMsg=心跳包接收成功").append(splite).toString();
long time6 = System.nanoTime();
System.out.println("StringBuilder add:"+(time6-time5)+"ns");
System.out.println("-------------------------------------------------");
}
  1. <span style="white-space:pre">    </span>@Test
  2. public void test1(){
  3. for(int i=0; i<10; i++){
  4. method1();
  5. }
  6. }
<span style="white-space:pre">	</span>@Test
public void test1(){
for(int i=0; i<10; i++){
method1();
}
}

运行结果:

  1. StringFormat:564859ns
  2. String add:55657ns
  3. StringBuilder add:3158ns
  4. -------------------------------------------------
  5. StringFormat:98683ns
  6. String add:2368ns
  7. StringBuilder add:1974ns
  8. -------------------------------------------------
  9. StringFormat:69867ns
  10. String add:2369ns
  11. StringBuilder add:1974ns
  12. -------------------------------------------------
  13. StringFormat:77762ns
  14. String add:3552ns
  15. StringBuilder add:2369ns
  16. -------------------------------------------------
  17. StringFormat:105788ns
  18. String add:3948ns
  19. StringBuilder add:2368ns
  20. -------------------------------------------------
  21. StringFormat:78552ns
  22. String add:2763ns
  23. StringBuilder add:1974ns
  24. -------------------------------------------------
  25. StringFormat:68683ns
  26. String add:2368ns
  27. StringBuilder add:1974ns
  28. -------------------------------------------------
  29. StringFormat:67894ns
  30. String add:2369ns
  31. StringBuilder add:1973ns
  32. -------------------------------------------------
  33. StringFormat:67499ns
  34. String add:2369ns
  35. StringBuilder add:1974ns
  36. -------------------------------------------------
  37. StringFormat:116840ns
  38. String add:3948ns
  39. StringBuilder add:3552ns
  40. -------------------------------------------------
StringFormat:564859ns
String add:55657ns
StringBuilder add:3158ns
-------------------------------------------------
StringFormat:98683ns
String add:2368ns
StringBuilder add:1974ns
-------------------------------------------------
StringFormat:69867ns
String add:2369ns
StringBuilder add:1974ns
-------------------------------------------------
StringFormat:77762ns
String add:3552ns
StringBuilder add:2369ns
-------------------------------------------------
StringFormat:105788ns
String add:3948ns
StringBuilder add:2368ns
-------------------------------------------------
StringFormat:78552ns
String add:2763ns
StringBuilder add:1974ns
-------------------------------------------------
StringFormat:68683ns
String add:2368ns
StringBuilder add:1974ns
-------------------------------------------------
StringFormat:67894ns
String add:2369ns
StringBuilder add:1973ns
-------------------------------------------------
StringFormat:67499ns
String add:2369ns
StringBuilder add:1974ns
-------------------------------------------------
StringFormat:116840ns
String add:3948ns
StringBuilder add:3552ns
-------------------------------------------------

当运行10次时,均显示StringBuilder.append.toString的效率比String的直接相加高。

测试执行10000次,结果如下:

  1. StringFormat:9079ns
  2. String add:789ns
  3. StringBuilder add:153550ns
  4. -------------------------------------------------
  5. StringFormat:18552ns
  6. String add:789ns
  7. StringBuilder add:141708ns
  8. -------------------------------------------------
  9. StringFormat:9078ns
  10. String add:395ns
  11. StringBuilder add:122761ns
  12. -------------------------------------------------
StringFormat:9079ns
String add:789ns
StringBuilder add:153550ns
-------------------------------------------------
StringFormat:18552ns
String add:789ns
StringBuilder add:141708ns
-------------------------------------------------
StringFormat:9078ns
String add:395ns
StringBuilder add:122761ns
-------------------------------------------------

highcharts 大数据 String+,StringBuilder,String.format运行效率比较的更多相关文章

  1. String+ String.Concat String.Format StringBuilder 之间的性能测试

    找到一篇国外的代码,专门来测试这个, String+ String.Concat String.Format StringBuilder 前三个在100个左右字符串差不多, String.Concat ...

  2. [C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密

    string 与 String,大 S 与小 S 之间没有什么不可言说的秘密 目录 小写 string 与大写 String 声明与初始化 string string 的不可变性 正则 string ...

  3. difference among String,StringBuilder,StringBuffer

    difference among String,StringBuilder,StringBuffer String常用构造函数 String(byte[] bytes) String(byte[] b ...

  4. String StringBuilder StringBuffer 对比 总结得非常好

    转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸 ...

  5. 谈String,StringBuilder,StringBuffer随笔

    一.谈谈三者在实现上的区别.   (1)先看String 方法,实现了Serializable, Comparable, CharSequence三个接口 package java.lang; imp ...

  6. (转)String StringBuilder StringBuffer 对比 总结得非常好

    来源:http://blog.csdn.net/clam_clam/article/details/6831345 转自:http://www.iteye.com/topic/522167 作者:每次 ...

  7. Java中 StringBuffer StringBuilder String 区别

    String       字符串常量   不可变  使用字符串拼接时是不同的2个空间 StringBuffer  字符串变量   可变   线程安全  字符串拼接直接在字符串后追加 StringBui ...

  8. Android jni/ndk编程二:jni数据类型转换(primitive,String,array)

    一.数据类型映射概述 从我们开始jni编程起,就不可能避开函数的参数与返回值的问题.java语言的数据类型和c/c++有很多不同的地方,所以我们必须考虑当在java层调用c/c++函数时,怎么正确的把 ...

  9. StringBuffer StringBuilder String 区别

    String       字符串常量   不可变  使用字符串拼接时是不同的2个空间 StringBuffer  字符串变量   可变   线程安全  字符串拼接直接在字符串后追加 StringBui ...

随机推荐

  1. centos安装svn并创建版本库配置用户分组权限

    1.设置aliyun安装源// 本步骤非必须, 使用aliyun安装源后, 执行yum update速度明显提升 wget -O /etc/yum.repos.d/CentOS-Base.repo h ...

  2. helm-chart7,调试与hook

    调试 几个命令可以帮助进行调试 helm lint 首选工具,返回错误和警告信息. helm install --dry-run --debug:服务器会渲染你的模板,然后返回结果清单文件. helm ...

  3. 【C语言程序】今天是祖国母亲的生日,特意编写一个小程序,为祖国母亲庆生~

    #include <stdio.h> #define N 80 int main(int argc, char *argv[]) { char a[N]; printf("Hel ...

  4. python学习:输出九九乘法表

    输出九九乘法表 代码: num1 = 1while num1 <= 9: num2 = 1 while num2 <= num1: print(str(num2)+"*" ...

  5. Jmeter学习系列----3 配置元件之计数器

    在做测试时,会遇到一种需求:在大量数据的情况下,数据不能重复或者需要自增,基于这种形式,我们可以考虑使用计数器. 计数器(counter): 计数器配置允许用户配置起始点,最大值和增量. 计数器将从开 ...

  6. SQL2005EXPress自动备份

    STEP1:在数据库服务器的master表中创建存储过程sp_BackupDatabase 代码如下 USE [master] GO /****** 对象: StoredProcedure [dbo] ...

  7. Java自学笔记

    1.标识符:字母,数字,下划线,美元符组成,不可以已数字开头,并且严格区分大小写 2.变量 有三个元素描述变量,变量类型,变量名,变量值 如何命名变量:首字母为 字母:下划线:“$“符号,其余部分为 ...

  8. golang 学习过程中踩的坑

    目录 [他人总结] 首字母大写才是对外可见的 包的初始化函数顺序问题 DB 连接泄漏问题 err 常用写法 goroutine 内的变量 指针可能是 nil 多层 map 未初始化 [他人总结] ht ...

  9. AKA “Project” Milestone

    Homework 6 (60 points)Due Thursday, April 25th at 11:59pm (via blackboard) AKA “Project” Milestone # ...

  10. 用sort方法输出数组