理解:String与StringBuffer的区别

String:

1、String不是基本数据类型,为对象是不可变的;
2、String类是final类型的,因此不可以继承这个类,一旦创建,就不能被修改这个值;
3、对存在的String对象进行改变的时候就等同于重新创建了一个新的String对象,然后将信值保存进去;
4、如果要经常改变字符串内容最好不用String,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后,就会触发JVM的GC开始工作,运行速度就会显得比较慢。
5、String 实现了equals方法,newString(“abc”).equals(newString(“abc”)的结果为 true,而 StringBuffer 没有实现equals 方法,
所以,new StringBuffer(“abc”).equals(newStringBuffer(“abc”)的结果为false。

因为String 覆盖了equals方法和hashCode方法,而StringBuffer 没有覆盖 equals方法和hashCode 方法,所以,将StringBuffer 对象存储进 Java集合类中会出现问题。


StringBuffer:

1、StringBuffer类的值是可以进行修改的,是可变对象;
2、使用append()方法修改Stringbuffer的值,使用toString()方法转换为字符串。
3、StringBuffer通过构造函数来建立;注:不能通过赋值符号对它进行付值
4、StringBuffer是线程安全的,在多线程程序中很方便。


举例:

1、StringBuffer和String:

<span style="white-space:pre">		</span>StringBuffer sb = new StringBuffer();
		long startTime = System.currentTimeMillis();
		for(int i = 0 ; i < 10000 ; i++)
		{
			sb.append(i);
		}
		long endTime = System.currentTimeMillis();
		System.out.println("StringBuffer:"+(endTime-startTime)+"毫秒");

		String str = new String();
		long startTime1 = System.currentTimeMillis();
		for(int i = 0 ; i < 10000 ; i++)
		{
			str = str + i;
		}
		long endTime1 = System.currentTimeMillis();
		System.out.println("String:"+(endTime1-startTime1)+"毫秒");


运行结果:

从运行结果上可以看出字符串的连接StringBuffer的效率要比String高,但也有一些特殊情况。

2、特殊:

<span style="white-space:pre">		</span>//第一种情况:		
<span style="white-space:pre">		</span>long startTime2 = System.currentTimeMillis();
		String st = "This is only a" + "simple"+ "test";
		long endTime2 = System.currentTimeMillis();
		System.out.println("String:"+(endTime2-startTime2)+"毫秒\t"+st);
		
		long startTime3 = System.currentTimeMillis();
		StringBuffer sbf = new StringBuffer("This is only a").append("simple").append("test");
		long endTime3 = System.currentTimeMillis();
		System.out.println("StringBuffer:"+(endTime3-startTime3)+"毫秒\t"+sbf);
<span style="white-space:pre">		</span>//第二种情况:
		long startTime4 = System.currentTimeMillis();
		String str1 = "This is only a";
		String str2 = "simple";
		String str3 = " test";
		String str4 = str1 + str2 +str3 ;
		long endTime4 = System.currentTimeMillis();
		System.out.println("String:"+(endTime4-startTime4)+"毫秒\t"+str4);


运行结果:


从运行结果来看,第一种情况生成String st 和生成StringBuffer sbf 速度几乎是一样的,而这个时候的StringBuffer一点也不占优势。

String st = "This is only a" + "simple"+ "test";//其实就是
String st = "This is only a simple test ;//所以就不需要太多时间。

 而第二种情况,字符串是来之不同的String对象的,在运行速度上就有一些区别。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值