实现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. vue cli搭建项目

    1.首先电脑要在安装node环境下才能运行 2.全局安装webpack:npm install webpack -g 3.安装vue脚手架: npm install vue-cli -g 4.新建文件 ...

  2. (57)Wangdao.com第九天_JavaScript 对象的简介及分类

    对象 引用数据类型. 对象是一种复合的数据类型,可以存储多个不同类型的变量. 以后我们看到的,只要不是String.Number.Boolean.Null.Undefined,那么就一定是 Objec ...

  3. AWS Nginx Started but not Serving AWS上Nginx服务器无法正常工作

    After install the Nginx on AWS instance, and visit your public ip address, you might see the followi ...

  4. 阿里云 ACP 考试学习过程分享

    目录 考证意义 学习方法 ACP 报名 学习安排[重要] 考试当天 其他 经验贴 考证意义 证多不压身,证比项目经历更具有说服力,证是行业的标准认证.更多时候,是有证的人说,"证其实不重要& ...

  5. SpringBoot微服务架构下的MVC模型总结

    SpringBoot微服务架构下的MVC模型产生的原因: 微服务概念改变着软件开发领域,传统的开源框架结构开发,由于其繁琐的配置流程 , 复杂的设置行为,为项目的开发增加了繁重的工作量,微服务致力于解 ...

  6. F#周报2019年第15期

    新闻 Hedgehog新站点 Bolero 0.4发布,增加远程认证 FsToolkit.ErrorHandling与Cvdm.ErrorHandling合并了 F#里的3D图形编程与游戏开发 有趣的 ...

  7. MySQL8.0.15的安装与配置---win10

    1.下载地址 https://dev.mysql.com/downloads/installer/ 安装文件:mysql-installer-community-8.0.15.0.msi 2.安装 默 ...

  8. treesoft,couchDB,

    下载 docker 镜像:docker pull docker.io/lu566/treesoft:1.0启动容器:docker run -d -p 127.0.0.1:18080:8080 dock ...

  9. JAVA RPC (六) 之thrift反序列化RPC消息体

    我们来看一下服务端的简单实现,直接上thrift代码,很直观的来看一看thrift的server到底干了些什么 public boolean process(TProtocol in, TProtoc ...

  10. 微信小程序区分点击,长按事件

    在上代码之前,微信小程序点击事件,长按事件的触发顺序需要我们了解一下下 事务分类 touchstart:手指触摸 longtap:手指触摸后后,超过350ms离开 touchend:手指触摸动作结束 ...