以下是我对看过的文章做了下总结,有空自己做下测试更有说服力~

“+”操作:

字串连接运算符“+”看似简单,但实际需要消耗大量系统资源。编
译器可高效地连接字串,但变量字串却要求可观的处理器时间。该操作要创建并拆除一
个StringBuffer 对象以及一个String 对象。

concat方法:

  1. public String concat(String str) {
  2. int otherLen = str.length();
  3. if (otherLen == 0) {
  4. return this;
  5. }
  6. char buf[] = new char[count + otherLen];
  7. getChars(0, count, buf, 0);
  8. str.getChars(0, otherLen, buf, count);
  9. return new String(0, count + otherLen, buf);
  10. }

可以看出,它也销毁了2个String对象,然后生成了一个新的String。但好处是不存在缓存区不足,需要扩充的情况。所以对于仅有2个String的连接,性能还是不错的。

StringBuffer和StringBuilder方式:

  1. public synchronized StringBuffer append(String str) {
  2. if (str == null) {
  3. str = String.valueOf(str);
  4. }
  5. int len = str.length();
  6. int newcount = count + len;
  7. if (newcount >value.length) expandCapacity(newcount);
  8. str.getChars(0, len, value, count);
  9. count = newcount; return this;
  10. }

新建一个StringBuffer(字串缓冲),用append 方法追加自变量,然后用toString()将结果转换回一个字串。当要追加多个字串,则可考虑直接使用一个字串缓冲——特别是能在一个循环里重复利用它的时候。通过在每次循环里禁止新建一个字串缓冲,可节省对象创建时间。所以在有多次连接操作时,性能要高。由于默认开辟的缓存仅有16个char,当长度不够时会自动扩充,但这个过程有复制的操作,所以在能预测最终长度的时候,初始化一个适当的缓冲长度,性能将有明显提升。

结论:

对于字符串相加的三种情况,使用的操作如下:

1.两个总长小于16的字符串,直接相加即可:s1+s2。这样不会对性能有影响

2.两个总长大于16的字符串,可以通过字符串的concat函数相加:s1.concat(s2)。

3.而如果是若干个字符串相加,如果是单线程,用StringBuilder性能更好;如果是多线程,则应使用StringBuffer保证线程安全。

转载于:https://blog.51cto.com/passover/425925

有关JAVA中不同方法对String连接性能的总结相关推荐

  1. Java中使用mysql驱动连接mysql以及mysql的安装

    好久不见,随着Java课程的推进小编其实也在不断的学习之中,同时也遇到很多问题,下面就由小编为大伙们详细的说一下Java中使用mysql驱动连接mysql数据库以及mysql的安装以及使用数据库连接池 ...

  2. java中如何将string 转化成long(亲测)

    转自:https://www.cnblogs.com/feifeicui/p/8390604.html 1.java中如何将string 转化成long long l = Long.parseLong ...

  3. JAVA中int、String的类型转换(亲测)

    int -> String int i=12345; String s=""; 第一种方法:s=i+""; 第二种方法:s=String.valueOf( ...

  4. java convert函数_自己实现 java中 Convert.toDouble(String str)处理函数 | 学步园

    今天在superWaba上看到Convert.toDouble(String str),由于底层问题比较大的数就出错,现在自己写了一个 程序中info()是我加的打印,可以去掉 java中 Conve ...

  5. java中,将string 转化成long

    1.java中如何将string 转化成long long l = Long.parseLong([String]); 或 long l = Long.parseLong([String],[int ...

  6. java中如何将string 转化成long

    1.Java中如何将string 转化成long long l = Long.parseLong([String]); 或 long l = Long.parseLong([String],[int ...

  7. unformat方法java_快速入门介绍Java中强大的String.format()

    快速入门介绍Java中强大的String.format() 发布于 2020-12-12| 复制链接 摘记: 前言从 Java 5.0 开始,String 类新增了一个强大的字符串格式化方法 form ...

  8. Java中String连接性能的分析

    总结:如果String的数量小于4(不含4),使用String.concat()来连接String,否则首先计算最终结果的长度,再用该长度来创建一个StringBuilder,最后使用这个String ...

  9. Java中巧用字符串连接

    首先,对于字符串而言,我们需要明确的是字符串实则是一个字符数组,不论是在C++还是在Java等面向对象的编程语言中. 一.C++中字符串的连接方式: (1)C++项目中插入string.h头文件,该文 ...

最新文章

  1. python3 的range
  2. 在华为路由器上配置IPv6 over IPv4隧道
  3. 架空输电线路运行规程_架空输电线路杆塔金具的种类
  4. BZOJ 1624 Usaco Clear And Present Danger
  5. FAILED: ValidationFailureSemanticException partition spec {dt=2021-04-01} doesn‘t contain all (2) pa
  6. C++继承时的一些细节知识点
  7. 替代密码的c语言程序,替代密码及置换密码的C语言实现.doc
  8. Atitit 信用管理概论 attilax学习心得
  9. redis 中 epoll 模型 ~ 霓裳
  10. 科研笔记1:科研绘图
  11. Android:光感自动调节亮度
  12. 2012服务器系统显示这台电脑,两台windows server 2012 R2 服务器 故障:计算机已经从检测错误后重新启动。请问如何解决?...
  13. Android 线程4件套 MessageQueue Message Looper Handler之MessageQueue
  14. 小分子药物logp预测/计算
  15. 学姐把我拉进小树林,奇怪的知识增加了
  16. 我该怎么救救我弟弟???
  17. 一款基于VUE的动态化弹出层插件
  18. Linux使用chrony让局域网内的服务器时间同步
  19. 在名为商品库的数据库中包含有商品规格表Content和商品特性表Property
  20. Java SSM 重制版(三)SpringSecurity

热门文章

  1. JVM优化系列-String对象在虚拟机中的实现
  2. Java高并发编程详解系列-7种单例模式
  3. Java虚拟机JVM的内存管理
  4. G1垃圾收集器之SATB
  5. 关于Gossip协议的几个问题
  6. EasyExcel简单使用
  7. 在集合中根据条件来筛选数据
  8. SpringCloudStream整合rabbitMq
  9. easyui combobox 左匹配模糊查询
  10. Android pid uid