zoukankan      html  css  js  c++  java
  • java基础入门-还原字符串的拼接的过程

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



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

  • 相关阅读:
    oracle 静默安装
    浅析hybrid模式下地支付宝钱包和微信
    LeetCode96_Unique Binary Search Trees(求1到n这些节点能够组成多少种不同的二叉查找树) Java题解
    hdu 5411 CRB and Puzzle 矩阵高速幂
    Hadoop作业性能指标及參数调优实例 (三)Hadoop作业性能參数调优方法
    实现Android4.4系统设置分页滑动浏览功能
    oracle 数据库中数据导出到excel
    Nginx配置upstream实现负载均衡
    公司须要内部的地图服务,准备自己去开发可是成本太高,如今有没有专门为企业提供GIS地图开发的产品呀?大概价格多少?
    图片在内存中的占用的空间大小
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4774589.html
Copyright © 2011-2022 走看看