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

字符串拼接性能比较出乎意料的结果

 一直认为String拼接大字符串时用StringBuffer能比直接用+号性能更高,今天偶然发现不竟然,是有前提的。如果String对象没用重新赋值,而是一次性把字符串拼接好赋值给String变量时性能是最高的(第二个例子String2)。如果String使用的是+=重新赋值,这时性能确实要比StringBuffer慢2-3倍左右(第一个例子String1)。

public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            String result = "This is ";
            result += "testing the";
            result += "difference between";
            result += "String and StringBuffer";
        }
        long endTime = System.currentTimeMillis();
        System.out.println(String.format("String+ 1 cost: %s millis", (endTime - startTime)));

        startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            String result = "This is" + "testing the" + "difference" + "between" + "String" + "and" + "StringBuffer";
        }
        endTime = System.currentTimeMillis();
        System.out.println(String.format("String+ 2  cost: %s millis", (endTime - startTime)));

        startTime = System.currentTimeMillis();
        for (int i = 0; i < 100000; i++) {
            StringBuffer sbResult = new StringBuffer();
            sbResult.append("This is ");
            sbResult.append("testing the");
            sbResult.append("difference between");
            sbResult.append("String and StringBuffer");
            sbResult.toString();
        }
        endTime = System.currentTimeMillis();
        System.out.println(String.format("StringBuffer cost: %s millis", (endTime - startTime)));
    }

 

运行结果:

 

转载于:https://www.cnblogs.com/mousewheel/p/7401320.html

相关文章:

  • P1038 神经网络
  • 了解Job和JobDeatil ,JobDataMap (三)
  • linux shell编程中的数组定义、遍历
  • MySQL 的wait_timeout参数
  • 快递鸟 即时查询接口
  • mySql基础
  • MySQL存储过程、触发器 小例子
  • Linux历史及版本
  • Java面试宝典《转载》
  • Android 03 style简单介绍
  • 黑客学习之信息收集
  • 安卓屏幕旋转时,禁止Activity重新加载
  • Selenium发展史
  • scala一些符号含义总结
  • Java内部类详解
  • [译] 怎样写一个基础的编译器
  • 【Leetcode】104. 二叉树的最大深度
  • 【刷算法】从上往下打印二叉树
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • es的写入过程
  • Git 使用集
  • java多线程
  • Java小白进阶笔记(3)-初级面向对象
  • LeetCode算法系列_0891_子序列宽度之和
  • Logstash 参考指南(目录)
  • markdown编辑器简评
  • php面试题 汇集2
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 构建工具 - 收藏集 - 掘金
  • 计算机在识别图像时“看到”了什么?
  • 前端
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 思考 CSS 架构
  • 云大使推广中的常见热门问题
  • kubernetes资源对象--ingress
  • 选择阿里云数据库HBase版十大理由
  • #{} 和 ${}区别
  • $.proxy和$.extend
  • (9)目标检测_SSD的原理
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (转)fock函数详解
  • (转)Oracle存储过程编写经验和优化措施
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • ./mysql.server: 没有那个文件或目录_Linux下安装MySQL出现“ls: /var/lib/mysql/*.pid: 没有那个文件或目录”...
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET业务框架的构建