Java中的String,StringBuilder,StringBuffer三者的区别

Java中的String,StringBuilder,StringBuffer三者的区别

区别在于两个方面:运行速度和线程安全。

1.首先是运行速度,运行速度方面StringBuilder>StringBuffer>String。

String慢的原因:
String是一个常量,而StringBuilder和StringBuffer是一个变量,也就是说String一旦被创建后将不再被更改,而后两者是可以的。
下面我们看个例子

String str="abc";
Log.i(TAG, str);
str=str+"de";
Log.i(TAG, str);

运行这段代码后先输出“abc”,然后又输出“abcde”,好像是str这个对象被更改了,其实不是这样的,jvm先创建一个str对象,然后把“abc”赋值进行输出,str在输出“abc”后运行到第三行代码时jvm又创建了一个str对象,然后把原来str中的“abc”拿过来再加上“de”,而原来的str对象就会被垃圾回收器回收。所以str并没有被更改,因此他每一次赋值都是要重新创建一个对象,所以他的速度较慢。

而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。

String str="abc"+"de";  //有时也会这样赋值
StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");
Log.i(TAG, str);
Log.i(TAG, stringBuilder.toString());

这样输出结果也是“abcde”和“abcde”,但是String的速度却比StringBuilder的反应速度要快很多,这是因为第1行中的操作和

String str= "abcde";

是完全一样的,所以会很快,而如果写成下面这种形式

String str1="abc";
String str2="de";
String str=str1+str2;

那么JVM就会像上面说的那样,不断的创建、回收对象来进行这个操作了。速度就会很慢。

2. 再来说线程安全

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder。

3.总结
String:少量字符串使用;

StringBuilder:单线程使用;

StringBuffer:多线程使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值