文档章节

java基础入门-还原字符串的拼接的过程

raylee2015
 raylee2015
发布于 2015/08/24 14:39
字数 378
阅读 1
收藏 0

平常我们很多时候都会使用字符串的拼接,但是为什么使用“+”号就是比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新的对象,所以导致性能低下



版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

raylee2015
粉丝 6
博文 265
码字总数 44224
作品 0
江门
私信 提问
Java架构师六大互联网公司面试经历总结

Java架构师面试经历 Java架构师面试经历从58同城——华为 ——招商银行网络中心——金蝶互联网公司GR——苏宁易购 ——蚂蚁金服,看完鬼知道我经历了什么,但是每一次都是成长。本人从2013年...

java知识分子
04/09
42
0
【Java学习路线】新手该如何一步步的学习 Java

新手该如何一步步的学习 Java? 如果真的想学Java,最好要循序渐进,有章有法的学习它! 今天小慕就不说一些学习方法和技巧了,直接来谈每个阶段要学习的内容。 首先,给大家分享一张以 企业...

Eddie_yang
2018/11/15
2.4K
0
Java基础教程,第六讲,格式化输入输出

上一课我们留下一个思考题,StringBuilder效率为什么比String的效率高? 第四讲我们已经说过了,Java中没有内置String类型,而是在Java的类库中提供了一个基类,当直接使用String拼接字符串时...

程序员补给栈
02/08
23
0
05《Java核心技术》之三种字符串类有什么区别?

一、提出问题 今天,我们来聊聊日常使用的字符串,别看它似乎很简单,但其实字符串几乎在所有编程语言里都是个特殊的存在,因为不管是数量还是体积,字符串都是大多数应用中的重要组成。 今天...

飞鱼说编程
2018/09/24
52
0
好程序员大数据视频教程从零基础入门到精通

好程序员大数据视频教程从零基础入门到精通,学习大数据技术的必经之路是什么?是Hadoop吗?当然不是!如果想要踏入大数据的门槛,一个必须的条件就是我们的编程基础。熟练掌握一门编程语言是对大...

好程序员IT
04/03
27
0

没有更多内容

加载失败,请刷新页面

加载更多

编程作业20190210900169

1编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来。 #include <stdio.h>#include <stdlib.h> int main(){ char firstName[20]; char lastName[20]; print......

1李嘉焘1
24分钟前
5
0
补码的优点及原理分析

只讨论整数 1.计算机内部为什么没有减法器? 减法运算本身其实就是加法,如x - y即x +(-y),所以只需要将负数成功表示出来并可以参加加法运算,那加法器就可同时实现“+”和“-”的运算。这...

清自以敬
39分钟前
64
0
Docker 可视化管理 portainer

官网安装指南: https://portainer.readthedocs.io/en/latest/deployment.html docker-compose.yml 位置,下载地址:https://downloads.portainer.io/docker-compose.yml...

Moks角木
今天
5
0
Spring Security 实战干货:必须掌握的一些内置 Filter

1. 前言 上一文我们使用 Spring Security 实现了各种登录聚合的场面。其中我们是通过在 UsernamePasswordAuthenticationFilter 之前一个自定义的过滤器实现的。我怎么知道自定义过滤器要加在...

码农小胖哥
今天
8
0
常见分布式事务解决方案

1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇,很多互联网行业巨头、开源...

asdf08442a
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部