java +号字符串拼接原理解释以及StringBulider比较

   首先平常在java中进行简单字符串拼接在一起最简单的方法就是 使用 "+",对与初学者是最简单的,但是随着写程序的增多,对代码的要求质量增高,发现使用 "+"的效率是非常低的,甚至我们应该不使用这种方式去拼接字符串,进行简单的例子进行说明一下。

首先准备一点测试代码:

public class Test {
	
	public static void main(String[] args) {
		
		String s = "";
		long starMs=System.currentTimeMillis();
		s =s+1;
		s= s+2;
		long endMs=System.currentTimeMillis();
		System.out.println(endMs-starMs);
		/*StringBuilder ss = new StringBuilder("");
		long starMs1=System.currentTimeMillis();
		ss.append(1);
		ss.append(2);
		long endMs1=System.currentTimeMillis();
		System.out.println(endMs1-starMs1);*/
				
	}
}
简单运行一下之后使用javap进行查看编译之后的字节码源码,如图:

我们发现在编译的过程 "+" 被编译成了StringBuilde对象进行的操作,但是我们又发现我们拼接了2次就创建了2个StringBuilder对象,显然不是我们想要的结果,我们要的是只产生一个对象,而不是拼接几次创建几个对象。

我们运行第二段StringBuilder拼接的代码,结果如图:

结果如图所示,我们清楚的看到拼接的过程值产生了一个StringBuilder对象,正是我们想要的结果,这一点就比每次创建一个对象效率高了许多,我们加大拼接的次数会怎么样呢,我们测试一下.

代码简单修改:

public class Test {
	
	public static void main(String[] args) {
		
		String s = "";
		long starMs=System.currentTimeMillis();
		for(int i=0;i<10000;i++){
			
			s+=1;
		}
		long endMs=System.currentTimeMillis();
		System.out.println(endMs-starMs);
		StringBuilder ss = new StringBuilder("");
		long starMs1=System.currentTimeMillis();
		for(int i=0;i<10000;i++){
			
			ss.append(i);
		}
		long endMs1=System.currentTimeMillis();
		System.out.println(endMs1-starMs1);
				
	}
}


很明显的是时间的长短,使用 "+"号,无疑创建了多个StringBuilder对象,执行完之后还要进行回收,无疑大大降低了效率。

堆的效果图:


以上只是个人观点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值