平常我们很多时候都会使用字符串的拼接,但是为什么使用“+”号就是比stringbuilder慢,而且慢很多?
实验
package com.ray.teststring;
/**
* 对比拼接字符串的两种方式
*
* @author ray
* @since 2015-04-19
* @version 1.0
*
*/
public class StringJoint {
/**
* 使用+拼接
*/
public void stringJointWithPlus() {
String str = "";
for (int i = 0; i < 60000; i++) {
str += "a";
}
}
/**
* 使用stringbuilder拼接
*/
public void stringJointWithStringBuilder() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 60000; i++) {
sb.append("a");
}
}
public static void main(String[] args) {
StringJoint stringJoint = new StringJoint();
long beginTime = System.currentTimeMillis();
stringJoint.stringJointWithPlus();
long firstTime = System.currentTimeMillis();
System.out.println(firstTime - beginTime);// 6813
long beginTime2 = System.currentTimeMillis();
stringJoint.stringJointWithStringBuilder();
long secondTime = System.currentTimeMillis();
System.out.println(secondTime - beginTime2);// 16
}
}
下面我们先输出+号操作里面的东西
package com.ray.teststring;
/**
* 对比拼接字符串的两种方式
*
* @author ray
* @since 2015-04-19
* @version 1.0
*
*/
public class StringJoint {
/**
* 使用+拼接
*/
public void stringJointWithPlus() {
String str = "";
for (int i = 0; i < 60000; i++) {
String temp=str;
System.out.println(temp.equals(str));
str += "a";
System.out.println(temp.equals(str));
}
}
/**
* 使用stringbuilder拼接
*/
public void stringJointWithStringBuilder() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 60000; i++) {
sb.append("a");
}
}
public static void main(String[] args) {
StringJoint stringJoint = new StringJoint();
long beginTime = System.currentTimeMillis();
stringJoint.stringJointWithPlus();
long firstTime = System.currentTimeMillis();
System.out.println(firstTime - beginTime);// 6813
long beginTime2 = System.currentTimeMillis();
stringJoint.stringJointWithStringBuilder();
long secondTime = System.currentTimeMillis();
System.out.println(secondTime - beginTime2);// 16
}
}
输出结果:
true
false
true
false
true
false
。。。
从结果上面来看,里面两个对象一直都是交错的不相同
下面我们来还原一下+号的操作:
str += "a";等价于
StringBuilder sb = new StringBuilder();
sb.append("a");
这两句的执行,所以在+的同时不断的new新的对象,所以导致性能低下
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
JAVA的字符串拼接与性能 概述:本文主要研究的是JAVA的字符串拼接的性能,原文中的测试代码在功能上并不等价,导致concat的测试意义不大。不过原作者在评论栏给了新的concat结果,如果有兴趣的同学建议自己修改代码...
Python代码源码-实操案例-框架案例-拼接字符串、列表和字典….zip
深度学习入门-Python语言学习-05字符串-入门学习
java课件-6-字符串和数组.pptx
关于经典算法--压缩字符串(将字符串内连续重复出现的字符进行压缩),个人的想法
动态规划算法:从1到26分别对应a-z的每一个字母,输入一串数字的字符串,转换为字母,输出所有可能的字母序列。如123->abc、lc、aw 本资源是按照二叉树的思想解决该问题。从字符串的头部开始,每次可以取一个或者两...
FORTRAN中整(实)型与字符型转换 Fortran字符串操作备忘录 产生序列文件名
核心基础-拼接字符串、列表和字典-Python实例源码.zip
一款方便将java与sql语句互相转换的小工具,在日常工作开发中,非常实用,f方便写字符串拼接的语句,常用选项是String和StringBuffer
java代码-java字符串工具类源代码合集 ——学习参考资料:仅用于个人学习使用!
SqlServer2000,用语数据库字符串相加的一个函数 用于字符串相加,字符串拼接
字符串a-z排序
java-string-similarity, 各种字符串相似性和距离算法 java-string-similarity 实现不同字符串相似度和距离度量的库。 目前已经实现了许多算法( 包括Levenshtein编辑距离和 sibblings,jaro winkler,最长公共子序列...
java作业 字符串多少个字 马克-to-win java视频详细介绍
Java根据正则表达式生成字符串,包括了Xeger和automaton
查找字符串需要结合pattern和matcher类使用 将指定的字符串形式的正则表达式编译成pattern对象
RobotFramework字符串拼接 字符串拼接 写case时,由于请求⾥⾯,参数值是个变量,遇到的问题 ⽐如需要增加⼀个配置,请求url,POST⽅法,需要传的参数,key:COMMENTS, value: test comments add hotelCode:${...
ibatis 拼接字符串
Java 实例 - 删除字符串中的一个字符源代码+详细教程.zip
Python入门教程--包含字符串、变量、运算符、分支语句等基础语法介绍和练习题,之前学习收集的资料~