美国上市公司,专注Java培训21年

java基础入门-还原字符串的拼接的过程


平常我们很多时候都会使用字符串的拼接,但是为什么使用“+”号就是比stringbuilder慢,而且慢很多?

实验

[java] view plaincopy

  1. package com.ray.teststring;


  2. /**

  3. * 对比拼接字符串的两种方式

  4. *

  5. * @author ray

  6. * @since 2015-04-19

  7. * @version 1.0

  8. *

  9. */

  10. public class StringJoint {


  11. /**

  12. * 使用+拼接

  13. */

  14. public void stringJointWithPlus() {

  15. String str = "";

  16. for (int i = 0; i < 60000; i++) {

  17. str += "a";

  18. }

  19. }


  20. /**

  21. * 使用stringbuilder拼接

  22. */

  23. public void stringJointWithStringBuilder() {

  24. StringBuilder sb = new StringBuilder();

  25. for (int i = 0; i < 60000; i++) {

  26. sb.append("a");

  27. }

  28. }


  29. public static void main(String[] args) {

  30. StringJoint stringJoint = new StringJoint();

  31. long beginTime = System.currentTimeMillis();

  32. stringJoint.stringJointWithPlus();

  33. long firstTime = System.currentTimeMillis();

  34. System.out.println(firstTime - beginTime);// 6813

  35. long beginTime2 = System.currentTimeMillis();

  36. stringJoint.stringJointWithStringBuilder();

  37. long secondTime = System.currentTimeMillis();

  38. System.out.println(secondTime - beginTime2);// 16

  39. }

  40. }

下面我们先输出+号操作里面的东西

[java] view plaincopy

  1. package com.ray.teststring;


  2. /**

  3. * 对比拼接字符串的两种方式

  4. *

  5. * @author ray

  6. * @since 2015-04-19

  7. * @version 1.0

  8. *

  9. */

  10. public class StringJoint {


  11. /**

  12. * 使用+拼接

  13. */

  14. public void stringJointWithPlus() {

  15. String str = "";

  16. for (int i = 0; i < 60000; i++) {

  17. String temp=str;

  18. System.out.println(temp.equals(str));

  19. str += "a";

  20. System.out.println(temp.equals(str));

  21. }

  22. }


  23. /**

  24. * 使用stringbuilder拼接

  25. */

  26. public void stringJointWithStringBuilder() {

  27. StringBuilder sb = new StringBuilder();

  28. for (int i = 0; i < 60000; i++) {

  29. sb.append("a");

  30. }

  31. }


  32. public static void main(String[] args) {

  33. StringJoint stringJoint = new StringJoint();

  34. long beginTime = System.currentTimeMillis();

  35. stringJoint.stringJointWithPlus();

  36. long firstTime = System.currentTimeMillis();

  37. System.out.println(firstTime - beginTime);// 6813

  38. long beginTime2 = System.currentTimeMillis();

  39. stringJoint.stringJointWithStringBuilder();

  40. long secondTime = System.currentTimeMillis();

  41. System.out.println(secondTime - beginTime2);// 16

  42. }

  43. }


输出结果:

true
false
true
false
true
false

。。。

从结果上面来看,里面两个对象一直都是交错的不相同

下面我们来还原一下+号的操作:

str += "a";等价于

[java] view plaincopy

  1. StringBuilder sb = new StringBuilder();

[java] view plaincopy

  1. sb.append("a");

[java] view plaincopy

  1. 这两句的执行,所以在+的同时不断的new新的对象,所以导致性能低下


【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!

Java开发高端课程免费试学

大咖讲师+项目实战全面提升你的职场竞争力

  • 海量实战教程
  • 1V1答疑解惑
  • 行业动态分析
  • 大神学习路径图

相关推荐

更多
  • Java培训班Java集合类知识集锦
    Java培训班Java集合类知识集锦
    企业对于Java集合类的使用都比较看重,而有的同学在这方面还真的是所知甚少,抽空也学习学习吧。 详情>>

    2017-02-23

  • Java泛型基础教程-java培训机构
    Java泛型基础教程-java培训机构
    今天java培训机构使用一种最简单的形式来总结一下程序员需要知道的关于Java泛型的最基本的知识。​ 详情>>

    2016-12-20

  • java基础轻松入门【就是这么简单】
    java基础轻松入门【就是这么简单】
    java常用语,轻松入门就是这么简单 详情>>

    2016-11-24

  • java语言的图案为什么是咖啡杯
    java语言的图案为什么是咖啡杯
    JAVA的图案为什么是咖啡? 详情>>

    2016-11-18

  • Java开班时间

    收起