String、StringBuffer和StringBuilder

String、StringBuffer和StringBuilder

String类的对象其实是不可变的,因为在修改对象是创建新的对象,释放了原来的对象,而StringBuffer和StringBuilder类创建的对象是可变的,可以通过append()、insert()、reverse()…等方法来修改值。StringBuffer是线程安全的,而StringBuilder是线程非安全的。String添加数据的时候使用+,StringBuffer和StringBuilder添加数据是使用append(),三者的执行速度是:StringBuilder > StringBuffer > String。然后为了验证一下它们的执行速度添加一些数据比较一下。

首先定义一个String类赋值为空,然后定义一下开始时间获取System.currentTimeMillis()这个其实是返回1970年1月1日00:00:00到现在的毫秒数,不过是用来计算过程时间的这个就行了,用for循环添加i添加25000次,定义一个结束时间和开始时间一样的作用,在定义一个用来计算过程的时间,用结束时间减开始时间就得到过程用了多少毫秒,最后在输出一下过程时间。

StringBuffer、StringBuilder和String的过程完全一样,然后代码如下:

public static void main(String[] args) throws IOException {
		
	//定义一个String
	String str= "";
	//定义开始时间
	long StartTime = System.currentTimeMillis();
	for (int i = 0; i < 25000; i++) {
		str = str+i;
	}
	//定义结束时间
	long EndTime = System.currentTimeMillis();
	//定义一个过程时间
	long ConsumeTime = EndTime-StartTime;
	System.out.println("String:添加数据用了"+ConsumeTime+"毫秒");
	
	//定义一个StringBuffer
	StringBuffer buffer = new  StringBuffer();
	long StartTime1 = System.currentTimeMillis();
	for (int i = 0; i < 25000; i++) {
		buffer.append(i);
	}
	long EndTime1 = System.currentTimeMillis();
	long ConsumeTime1 = EndTime1-StartTime1;
	System.out.println("StringBuffer:添加数据用了"+ConsumeTime1+"毫秒");
	
	//定义一个StringBuilder
	StringBuilder builder = new StringBuilder();
	long StartTime2 = System.currentTimeMillis();
	for (int i = 0; i < 25000; i++) {
		builder.append(i);
	}
	long EndTime2 = System.currentTimeMillis();
	long ConsumeTime2 = EndTime2-StartTime2;
	System.out.println("StringBuilder:添加数据用了"+ConsumeTime2+"毫秒");
	
}

结果截图:
在这里插入图片描述
通过截图可以用看到String添加数据比StringBuffer、StringBuilder添加数据耗时很多,所以要添加大量数据时最好选择StringBuffer和StringBuilder,线程安全选StringBuffer,线程不安全选StringBuilder。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值