java基础之字符串

Java平台提供了三个类:String、StringBuffer、StringBuilder,它们可以储存和操作字符串,即包含多个字符的字符数据

  • String
    1.String是final类,也即意味着String类不能被继承

    2.String是字符串常量,即String对象一旦创建就不可更改,有句话是这么说的

对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象

如:
String str=“abc”;
System.out.println(str);
str=str+“de”;
System.out.println(str);
这里是产生了两个字符串"abc"和"abcde"

3.String类重写了equals方法,new String(“abc”).equals(new String(“abc”)的结果为true,而StringBuffer与StringBuilder没有实现,所以用equals方法比较StringBuffer或StringBuilder对象会返回false

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

  • StringBuffer
    StringBuffer是可变字符串,同时也是线程安全的
  • StringBuilder
    StringBuilder也是可变字符串,但是线程不安全
  • 三者之间的效率比较
    综上所述,String的效率应该是最慢的,因为每次对String类的修改都会产生新的对象。
    理论上StringBuilder的效率应该比StringBuffer块,因为StringBuffer中很多方法带有synchronized关键字
    通过代码具体比较一下
public class StringTest {

    public static void string(){
        String str="";
        for (int i=0;i<100000;i++){
            str=str+i;
        }
    }

    public static void stringBuffer(){
        StringBuffer str=new StringBuffer("");
        for (int i=0;i<100000;i++){
            str.append(i);
        }
    }

    public static void stringBuider(){
        StringBuilder str=new StringBuilder("");
        for (int i=0;i<100000;i++){
            str.append(i);
        }
    }



    public static void main(String [] args){
        long time1= new Date().getTime();
        string();
        long time2= new Date().getTime();
        System.out.println(time2-time1);

    }

}

准备了三个拼接字符串的方法,分别是String、StringBuffer、StringBuilder
对比一下他们拼接从0到100000所需要的时间
首先是String类 32092毫秒
StringStringBuffer 30毫秒
StringBuffer差距有点大了
StringBuilder类 32毫秒
StringBuilder

这是为什么???
StringBuilder不是应该比StringBuffer快的吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值