当前位置: 首页 > news >正文

字符串拼接方法性能对比和分析

对字符串进行拼接主要有三种方法:
1.加号
2.concat方法
3.StringBuilder或者StringBuffer的append方法
下面看下性能对比,测试方法为各循环十万次,对比耗费时间。

测试性能

1.”+"拼接

        long start = System.currentTimeMillis();String str = "j";for (int i = 0; i < 100000; i++) {str += "a";}long end = System.currentTimeMillis();System.out.println("执行时间" + (end - start));

在这里插入图片描述
2.concat方法

        long start = System.currentTimeMillis();String str = "j";for (int i = 0; i < 100000; i++) {str = str.concat("a");}long end = System.currentTimeMillis();System.out.println("执行时间" + (end - start));

在这里插入图片描述
3.StringBuilder的append方法

        long start = System.currentTimeMillis();StringBuilder sb = new StringBuilder("j");for (int i = 0; i < 100000; i++) {sb.append("a");}String str = sb.toString();long end = System.currentTimeMillis();System.out.println("执行时间" + (end - start));

在这里插入图片描述
结论:append最快,concat其次,加号最慢。

分析

1.加号拼接基本等同StringBulider的append方法,但为啥耗费时间远大于append?

str = new StringBuilder("j").append("a").toString();

因为每次循环都要创建StringBuilder对象,都要调用toString方法转换为字符串。

2.concat方法分析,下面是concat的源码。

    public String concat(String str) {if (str.isEmpty()) {return this;}int len = value.length;int otherLen = str.length();char buf[] = Arrays.copyOf(value, len + otherLen);str.getChars(buf, len);return new String(buf, true);}

其实就是一个数组拷贝,它本身是很快的,但是最后都要new一个String对象,循环十万次就是new十万个对象。

3.append方法分析

    public AbstractStringBuilder append(String str) {if (str == null)return appendNull();int len = str.length();ensureCapacityInternal(count + len);str.getChars(0, len, value, count);count += len;return this;}
    public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {if (srcBegin < 0) {throw new StringIndexOutOfBoundsException(srcBegin);}if (srcEnd > value.length) {throw new StringIndexOutOfBoundsException(srcEnd);}if (srcBegin > srcEnd) {throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);}System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin);}

本质上就是加长数组长度,数组拷贝,没有new任何对象。最后循环完毕用toString方法返回字符串。
以上就是性能分析,但在我们平时开发中,没有如此大量的拼接处理,加号拼接更友好和阅读,也没有什么问题。


http://www.mrgr.cn/news/48888.html

相关文章:

  • 顺序栈与链队列
  • 6-蓝牙模块与数据包解析
  • Java分布式锁
  • Python从入门到高手6.3节-字符串操作方法
  • 聚类分析 | NRBO-GMM聚类优化算法
  • JDK 1.4主要特性
  • 【C#生态园】完整解读C#网络通信库:从基础到实战应用
  • 《DATE: Domain Adaptive Product Seeker for E-commerce》中文校对版
  • 嵌入式数据结构中顺序栈用法
  • 设计模式(学习笔记)
  • 二进制转十六进制
  • echarts 入门
  • 为什么很多人宁愿加钱买港版,也不愿买国行 iPhone 16
  • python爬虫 - 进阶正则表达式
  • 郑光荣参加老年春节联欢晚会团长会议现场采访
  • 初知C++:AVL树
  • 【在Linux世界中追寻伟大的One Piece】DNS与ICMP
  • 简单粗暴理解GNN、GCN、GAT
  • 【单机游戏】【烛火地牢2:猫咪的诅咒】烛火地牢2:猫咪的诅咒介绍
  • Vue2中如何使用从父组件中使用子组件中的数据