String、StringBuffer、StringBuilder的比较

在Java中对字符串的处理主要使用String、StringBuffer和StringBuilder这三个类。下面我们就来学习和比较一下这三个字符串处理类。
-String
String类型的对象是不可变的对象,所有对String类型的变量的改变都是开辟了一个新的空间,生成了一个新的String对象,然后让原来的String类型的变量指向新的String对象。
实例化String对象的方式:
1)直接赋值

String str="hello";    

2)通过new关键字创建

String str=new String("hello");

我们来对比一下这两种方式实例化String对象的不同:
第一种直接赋值的方式,就是开辟了一个空间,内容是“hello”,然后
str对象指向这个空间。
第二种方式实际上呢是开辟了两个空间,一个是没有对象指向的空间,内容是”Hello”,一个是有对象指向的空间,内容也是”hello”。如下图所示:
这里写图片描述
通过上述描述,很明显直接赋值实例化String对象肯定是比使用new关健字实例化String对象效率要高。多以在实际开发中更多的是以直接赋值的方式来创建字符串。

-StringBuffer
StringBuffer是可变的对象,所有对StringBuffer对象的改变都是对原StringBuffer对象的改变。
StringBuffer同时也是线程安全的,StringBuffer类的方法前面都有关键字synchronized,都是同步方法,也就是说如果有多个线程操作同一个StringBuffer对象是顺序进行的。

-StringBuilder
StringBuilder也是可变的对象,并且处理速度比StringBuffer要快。
但不是线程安全的。

总结:
大部分情况下StringBuffer的处理速度比String的处理速度要快
当然也有特殊的情况:

String str1="Welcome"+" to"+" my"+"contry!";
StringBuffer str2=new StringBuffer("Welcome").append("to").append(" my").append("contry!");

这时候生成str1的速度要比生成str2的速度要快的多!
因为String str1=”Welcome”+” to”+” my”+”contry!”;
其实就是:
String str1=”Welcome to my contry!”,当然不需要多少处理时间。

StringBuilder的处理速度要比StringBuffer的处理的速度要快
但StringBuffer是线程安全的,StringBuilder不是线程安全的
所以在需要对字符串做大量改变的时候,建议使用StringBuffer或StringBuilder
在单线程下建议使用StringBuilder,在多线程下建议使用StringBuffer

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值