有关JAVA中不同方法对String连接性能的总结
以下是我对看过的文章做了下总结,有空自己做下测试更有说服力~
“+”操作:
字串连接运算符“+”看似简单,但实际需要消耗大量系统资源。编
译器可高效地连接字串,但变量字串却要求可观的处理器时间。该操作要创建并拆除一
个StringBuffer 对象以及一个String 对象。
concat方法:
- public String concat(String str) {
- int otherLen = str.length();
- if (otherLen == 0) {
- return this;
- }
- char buf[] = new char[count + otherLen];
- getChars(0, count, buf, 0);
- str.getChars(0, otherLen, buf, count);
- return new String(0, count + otherLen, buf);
- }
可以看出,它也销毁了2个String对象,然后生成了一个新的String。但好处是不存在缓存区不足,需要扩充的情况。所以对于仅有2个String的连接,性能还是不错的。
StringBuffer和StringBuilder方式:
- public synchronized StringBuffer append(String str) {
- if (str == null) {
- str = String.valueOf(str);
- }
- int len = str.length();
- int newcount = count + len;
- if (newcount >value.length) expandCapacity(newcount);
- str.getChars(0, len, value, count);
- count = newcount; return this;
- }
新建一个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连接性能的总结相关推荐
- Java中使用mysql驱动连接mysql以及mysql的安装
好久不见,随着Java课程的推进小编其实也在不断的学习之中,同时也遇到很多问题,下面就由小编为大伙们详细的说一下Java中使用mysql驱动连接mysql数据库以及mysql的安装以及使用数据库连接池 ...
- java中如何将string 转化成long(亲测)
转自:https://www.cnblogs.com/feifeicui/p/8390604.html 1.java中如何将string 转化成long long l = Long.parseLong ...
- JAVA中int、String的类型转换(亲测)
int -> String int i=12345; String s=""; 第一种方法:s=i+""; 第二种方法:s=String.valueOf( ...
- java convert函数_自己实现 java中 Convert.toDouble(String str)处理函数 | 学步园
今天在superWaba上看到Convert.toDouble(String str),由于底层问题比较大的数就出错,现在自己写了一个 程序中info()是我加的打印,可以去掉 java中 Conve ...
- java中,将string 转化成long
1.java中如何将string 转化成long long l = Long.parseLong([String]); 或 long l = Long.parseLong([String],[int ...
- java中如何将string 转化成long
1.Java中如何将string 转化成long long l = Long.parseLong([String]); 或 long l = Long.parseLong([String],[int ...
- unformat方法java_快速入门介绍Java中强大的String.format()
快速入门介绍Java中强大的String.format() 发布于 2020-12-12| 复制链接 摘记: 前言从 Java 5.0 开始,String 类新增了一个强大的字符串格式化方法 form ...
- Java中String连接性能的分析
总结:如果String的数量小于4(不含4),使用String.concat()来连接String,否则首先计算最终结果的长度,再用该长度来创建一个StringBuilder,最后使用这个String ...
- Java中巧用字符串连接
首先,对于字符串而言,我们需要明确的是字符串实则是一个字符数组,不论是在C++还是在Java等面向对象的编程语言中. 一.C++中字符串的连接方式: (1)C++项目中插入string.h头文件,该文 ...
最新文章
- python3 的range
- 在华为路由器上配置IPv6 over IPv4隧道
- 架空输电线路运行规程_架空输电线路杆塔金具的种类
- BZOJ 1624 Usaco Clear And Present Danger
- FAILED: ValidationFailureSemanticException partition spec {dt=2021-04-01} doesn‘t contain all (2) pa
- C++继承时的一些细节知识点
- 替代密码的c语言程序,替代密码及置换密码的C语言实现.doc
- Atitit 信用管理概论 attilax学习心得
- redis 中 epoll 模型 ~ 霓裳
- 科研笔记1:科研绘图
- Android:光感自动调节亮度
- 2012服务器系统显示这台电脑,两台windows server 2012 R2 服务器 故障:计算机已经从检测错误后重新启动。请问如何解决?...
- Android 线程4件套 MessageQueue Message Looper Handler之MessageQueue
- 小分子药物logp预测/计算
- 学姐把我拉进小树林,奇怪的知识增加了
- 我该怎么救救我弟弟???
- 一款基于VUE的动态化弹出层插件
- Linux使用chrony让局域网内的服务器时间同步
- 在名为商品库的数据库中包含有商品规格表Content和商品特性表Property
- Java SSM 重制版(三)SpringSecurity