美文网首页
StringBuffer类

StringBuffer类

作者: 秋笙fine | 来源:发表于2019-01-26 14:57 被阅读0次

    1.StringBuffer类的主要特点

    2.StringBuffer,StringBuilder,String区别

    回顾String类特点:
    String类对象有两种实例化方式:
    1.直接赋值:只开辟一块堆内存空间,赋值符号右边直接自动入常量池
    构造方法:开辟两块堆内存空间,赋值符号左边一块,右边一块,不会自动入池,使用intern()手工入池。
    2.任何一个字符串都是String类的匿名对象
    3.字符串一旦声明则不可改变,可以改变的只是String类对象的引用。

    由于String类内容不可改变,为此在Java里面提供有另外一个类StringBuffer类(里面的内容可以修改)。

    String类的对象可以使用"+"进行字符串的连接操作,而StringBuffer类必须使用append()方法。
    方法:public StringBuffer append(数据类型 变量)

    范例:观察StringBuffer的基本使用。

    package TestDemo;
    
    
    public class TestDemo{
        
        public static void main(String[] args){
            //String类可以直接赋值,但是Stringbuffer类不可以
            StringBuffer stringBuffer=new StringBuffer();
            stringBuffer.append("Hello").append("World!");
    
            //String的引用传递 内容不可变final修饰,而StringBuffer呢
            change(stringBuffer);//引用传递
            System.out.println(stringBuffer);
        }
        public static void change(StringBuffer buffer){
            buffer.append("\n").append("Hello SL!");
        }   
    }
    

    根据引用传递的不同,也能看出StringBuffer可变,String为final修饰的不可变。


    image.png

    清楚了StringBuffer的基本使用与基本操作之后,继续观察两个类的定义情况。
    String类:

    public final class String extends Object
    implements Serializable, Comparable<String>, CharSequence
    

    StringBuffer类:

    public final class StringBuffer
        extends Object
        implements Serializable, CharSequence
    

    发现这两个类都是CharSequence接口的子类。而在以后的开发之中,如果你看见某些方法的操作上出现的是CharSequence接口,那么应该清楚,只需要传递字符串即可。因为是接口子类的实现,所以可以传递。

    package TestDemo;
    
    
    public class TestDemo{
        
        public static void main(String[] args){
            CharSequence seq="Hello";//向上转型,String的匿名对象向上转型成Charsequence接口对象,所以赋值号右边可以是CharSequence或其接口子类
            System.out.println(seq);
        }   
    }
    

    虽然String和StringBuffer类有着共同的接口,但是两个类对象之间无法直接转换。

    String转化为StringBuffer

    1.利用StringBuffer构造方法
    public StringBuffer(String str)
    2.利用append()方法
    public StringBuffer append(CharSequence s)

    public class TestDemo{
        
        public static void main(String[] args){
            StringBuffer seq=new StringBuffer("Hello");
            seq.append("nihao");
            System.out.println(seq);
        }   
    }
    

    StringBuffer类变为String

    利用toString方法可以将StringBuffer,转化为String

    
    public class TestDemo{
        
        public static void main(String[] args){
            StringBuffer seq=new StringBuffer("Hello");
            String string=seq.toString();
            System.out.println(string);
        }   
    }
    

    也可以利用String的构造方法:
    public String(StringBuffer sb).

    String和StringBuffer内容比较:

    public boolean contentEquals(StringBuffer sb)

    String类之中定义了许多的方法,方便于用户的开发,而在StringBuffer类也定义了一些方法,正好与String类互补。
    1.字符串反转/转置 public StringBuffer reverse();

    public class TestDemo{
        
        public static void main(String[] args){
            StringBuffer seq=new StringBuffer("Hello");
            System.out.println(seq.reverse());
        }   
    }
    
    image.png

    2.在指定索引位置增加数据:
    public StringBuffer insert(int offset,数据类型 变量)

    public class TestDemo{
        
        public static void main(String[] args){
            StringBuffer seq=new StringBuffer("Hello");
            seq.insert(0, "nihao").insert(0, "dajia");
            System.out.println(seq);
        }   
    }
    
    image.png

    3.删除部分数据
    public StringBuffer delete(int start,int end)

    public class TestDemo{
        
        public static void main(String[] args){
            StringBuffer seq=new StringBuffer("Hello World SL");
            seq.delete(5, 11);
            System.out.println(seq);
        }   
    }
    
    image.png

    从JDK1.5之后,增加了一个新的字符串操作类,StringBuilder类:

    public final class StringBuilder
    extends Object
    implements Serializable, CharSequence
    

    我们发现和StringBuffer类定义一样,方法也相同,文档中他们两者一样,但是翻看JDK源码,我们可以发现StringBuffer线程安全(synchronized修饰),StringBuilder线程不安全。

    面试题:String,StringBuilder,StringBuffer的区别?
    1.String的内容一旦声明不可改变(final修饰),StringBuilder,StringBuffer可以改变
    2.StringBuffer提供的方法都是同步方法(synchronized),属于线程安全的操作,而StringBuilder类都属于异步方法,线程不安全。

    日后在开发之中,95%使用String类,只有在需要频繁修改时候使用StringBuffer/StringBuilder。

    相关文章

      网友评论

          本文标题:StringBuffer类

          本文链接:https://www.haomeiwen.com/subject/pvlijqtx.html