String、StringBuffer和StringBuilder

来源:互联网 发布:快递怎么找淘宝客户 编辑:程序博客网 时间:2024/06/05 18:30

String类代表字符串,String一旦创建就不能改变,就不能改变,如果需要大量的字符串修改操作,就要到StringBuffer/StringBuilder,或者字符串数组,最终结果会被转换成为String对象。
StringBuffer是线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,通过某些方法调用就能够改变该序列 的长度和内容。

//举一个具体的例子来说明,我们要把1到100的所有数字拼起来,组成一个串。    StringBuffer sbf = new StringBuffer();      for(int i=0;i<100;i++){        sbf.append(i);    }    //上面的代码效率很高,因为只创建了一个StringBuffer对象    //而下面的代码效率很低,因为创建了101个对象。    String str = new String();      for(int i=0;i<100;i++){        str = str + i;    }

StringBuilder是在jdk5以后,为StringBuffer类补充了一个供单个线程使用的等价类。线程是不安全的。

以StringBuilder为例:

    String st1= "zxs";      /**     * 第一种:如果再次定义一个String st3="zxs";     * 首先会去字符串池里面去看有没有"zxs"这个字符串     * 有的话就直接让st3这个引用指向这个字符串,否则创建一个新的     */    //下面这种,new了几次,就创建了几次,即使创建的字符串的内容相同    String st2=new String("abc");    //StringBuilder sb="abc";  //没有此种声明方式    //StringBuilder sb = new StringBuilder();//默认为16个大小的字符容量    //StringBuilder(int capacity);有这个构造方法,所以可以改变初始的容量大小    //StringBuilder sb = new StringBuilder(100);    StringBuilder sb = new StringBuilder();  //常用方法,其余方法可查看API文档    sb.append("hello");    sb.append(10);    sb.append(10.6);    sb.append(true);    System.out.println(sb.length());   //输出字符串的长度    System.out.println(sb.capacity()); //输出容量大小,默认为16    sb.insert(5, "zxs");  //在5的地方插入字符串    System.out.println(sb.toString());    System.out.println(sb.indexOf("z")); //查找字符串    sb.replace(5, 6, "w"); //替换    System.out.println(sb.toString());    System.out.println(sb.reverse());  //倒序输出

1、 在单线程当中,与StringBuffer相比,优先考虑使用StringBuilder类,因为它支持所有相同的操作,但是它不同步,所以速度更快。

举个例子,StringBuffer是一个房间你只能进去一个人,如果第二个人进来,首先会去判断房间里面有没有人,如果有人的话,就会去等待。等第一个人出来。但是StringBuilder的话第二个人来的话不会等待,会推门直接进去。

2、String实现了equals方法,new String(“abc”).equals(new String(“abc”)的结果为true,而StringBuffer没有实现equals方法,所以,new StringBuffer(“abc”).equals(new StringBuffer(“abc”)的结果为false。

0 0
原创粉丝点击