String,StringBuffer,StringBuilder的区别

首先String,StringBuffrt,StringBuilder都是用于操作字符串。


我们先说说String:String一种不可变类,即在给String类型的变量重新赋值的时候String的地址也会发生改变,所以会产生新的对象,而String变量的值如果相同,那么地址就是一样,也就是说他们指向都是一样的,所以重新赋值是生成一个新的对象然后指向新的对象。原来的指向的对象将会被当作来及被GC回收掉。

[html]  view plain  copy
  1. String str = "abc";  
  2. String str1 = "abc";  
  3. System.out.println(str == str1);//结果true  比较地址  
  4. str = "abcd";  
  5. System.out.println(str == str1);//结果false  
这种别每次改变Stirng都要生成新的对象,然后在指向新的对象,效率非常低,操作少量字符串的时候可以使用。



再说StringBuffer:StringBuffer是一种可变类,任何改变它都不会生成新的对象,StringBuffer是支持并发操作,线程是安全的。

[html]  view plain  copy
  1. StringBuffer buffer = new StringBuffer(512);//512缓存字节  
  2. buffer.append("aaa");  
  3. System.out.println(buffer.hashCode());//488676694  
  4. buffer.append("bbb");  
  5. System.out.println(buffer.hashCode());//488676694  
  6. //比较两次值其实是相同的  
两次比较相同,说明了StringBuffer是一种不可变类,没有分配新的地址,没有新的对象,适用于多线程。


然后说StringBuilder:StringBuilder通StringBuffer一样都是不可变类,任何改变都不会生成新的对象,但是StringBuilder是多线程不安全的,单线程StringBuilder比StringBuffer要快一些。

[html]  view plain  copy
  1. long startTime;  
  2. long endTime;  
  3. StringBuffer buffer = new StringBuffer(512);  
  4. startTime = System.currentTimeMillis();  
  5. for(int i = 0; i < 10000; i++){  
  6.     buffer.append(i);  
  7. }  
  8. endTime = System.currentTimeMillis();  
  9. System.out.println(endTime -startTime);//结果13  
  10. StringBuilder builder = new StringBuilder(512);  
  11. startTime = System.currentTimeMillis();  
  12. for(int i = 0; i < 10000; i++){  
  13.     builder.append(i);  
  14. }  
  15. endTime = System.currentTimeMillis();  
  16. System.out.println(endTime -startTime);//结果3  
相比较而言StringBuilder确实比StringBuffer快,String就不比较了,肯定比其他两种更慢



总而言之,对字符串少量操作的时候使用Stiring比较方便,多线程使用StringBuffer,对字符有大量操作的时候但又不在多线程中时候可以使用StringBuilder,不然使用StringBuffer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值