java基础入门-还原字符串的拼接的过程
平常我们很多时候都会使用字符串的拼接,但是为什么使用“+”号就是比stringbuilder慢,而且慢很多?
实验
[java] view plaincopy
-
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
-
}
-
}
下面我们先输出+号操作里面的东西
[java] view plaincopy
-
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";等价于
[java] view plaincopy
-
StringBuilder sb = new StringBuilder();
[java] view plaincopy
-
sb.append("a");
[java] view plaincopy
-
这两句的执行,所以在+的同时不断的new新的对象,所以导致性能低下
【免责声明】本文部分系转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,如涉及作品内容、版权和其它问题,请在30日内与我们联系,我们会予以重改或删除相关文章,以保证您的权益!
Java开发高端课程免费试学
大咖讲师+项目实战全面提升你的职场竞争力
- 海量实战教程
- 1V1答疑解惑
- 行业动态分析
- 大神学习路径图
达内就业喜报
更多>Java开班时间
-
北京 丨 11月27日
火速抢座 -
上海 丨 11月27日
火速抢座 -
广州 丨 11月27日
火速抢座 -
兰州 丨 11月27日
火速抢座 -
杭州 丨 11月27日
火速抢座 -
南京 丨 11月27日
火速抢座 -
沈阳 丨 11月27日
火速抢座 -
大连 丨 11月27日
火速抢座 -
长春 丨 11月27日
火速抢座 -
哈尔滨 丨 11月27日
火速抢座 -
济南 丨 11月27日
火速抢座 -
青岛 丨 11月27日
火速抢座 -
烟台 丨 11月27日
火速抢座 -
西安 丨 11月27日
火速抢座 -
天津 丨 11月27日
火速抢座 -
石家庄 丨 11月27日
火速抢座 -
保定 丨 11月27日
火速抢座 -
郑州 丨 11月27日
火速抢座 -
合肥 丨 11月27日
火速抢座 -
太原 丨 11月27日
火速抢座 -
苏州 丨 11月27日
火速抢座 -
武汉 丨 11月27日
火速抢座 -
成都 丨 11月27日
火速抢座 -
重庆 丨 11月27日
火速抢座 -
厦门 丨 11月27日
火速抢座 -
福州 丨 11月27日
火速抢座 -
珠海 丨 11月27日
火速抢座 -
南宁 丨 11月27日
火速抢座 -
东莞 丨 11月27日
火速抢座 -
贵阳 丨 11月27日
火速抢座 -
昆明 丨 11月27日
火速抢座 -
洛阳 丨 11月27日
火速抢座 -
临沂 丨 11月27日
火速抢座 -
潍坊 丨 11月27日
火速抢座 -
运城 丨 11月27日
火速抢座 -
呼和浩特丨11月27日
火速抢座 -
长沙 丨 11月27日
火速抢座 -
南昌 丨 11月27日
火速抢座 -
宁波 丨 11月27日
火速抢座 -
深圳 丨 11月27日
火速抢座 -
大庆 丨 11月27日
火速抢座