69java StringBuffer类

109 阅读3分钟

StringBuffer

一、String类特点:

1.对于Java类库的学习首先明确一点:

要学会查询文档。

2.任何的字符串常量都是String对象,String常量一旦声明则不可改变,如果改变对象的内容改变的是其引用的指向。

  二、StringBuffer使用

1.String的使用比较简单,但是String这种不可更改的缺点并不好,为了方便字符串的修改专门提供有一个StringBuffer类,而在String类使用的是“+”来进行字符串的连接,但是这个操作在StringBuffer类里面需要更换为append(数据类型 b)方法

范例:

StringBuffer使用

package cn.mldn.demo;

public class TestDemo{

public static void main(String[] args) throws Exception {

StringBuffer buf =new StringBuffer();  // 建立一个StringBuffer类对象

buf.append("hello").append("world");

fun(buf);   //  修改了StringBuffer的内容

System.out.println(buf);

    }

Public static void fun(StringBuffer temp){

temp.append("\n").append("www.mldn.cn");   

    }

}

 

 

三、String与StringBuffre的区别

1.String与StringBuffre最大的区别:

String的内容无法修改,而StringBuffer的内容可以修改。

注:在开发中优先选择String类,频繁修改才会使用StringBuffer。  

例:

package cn.mldn.demo;

public class TestDemo{

public static void main(String[] args) throws Exception {

StringBuffer buf = new StringBuffer();// 建立一个StringBuffer类的对象

buf.append("hello").append("world");

String str ="hello"+"world" ;

for (int x = 0 ; X < 10000 ;x++) {

 buf.append(x) ;

}

    }

}

 

 

2.观察String与StringBuffer的继承结构:

        String类StringBuffer类
Public final class Stringextends ObjectImplements Serializable, Comparable, CharSequencePublic final class StringBufferextends ObjectImplements Serializable, CharSequence

 

两个类都是“CharSeqence”接口子类。这个接口描述的是字符集,所以字符串属于字符集的子类,证明以后看见了CharSeqence最简单的联想就是个字符串:

    package cn.mldn.demo;

public class TestDemo{

public static void main(String[] args) throws Exception {

    CharSequence seq = "hello"//字符串,子类为父接口实例化

}

}

 

3.观察StringBuffer类的构造方法:public StringBuffer(CharSequence seq)

 

注:虽然String和StringBuffer都属于CharSequence接口的子类,但是这两个类的对象不能直接转换如果要转换,可以采用如下原则:

  • String变StringBuffer:利用StringBuffer的构造,append()方法;

 

    package cn.mldn.demo;

public class TestDemo{

public static void main(String[] args) throws Exception {

     

 String str  =  "hello";   //字符串,子类为父接口实例化

   StringBuffer buf = new StringBuffer(str);

System.out.println(buf);

}

}

或者

package cn.mldn.demo;

public class TestDemo{

public static void main(String[] args) throws Exception {

       String str  =  "hello";   //字符串,子类为父接口实例化

   StringBuffer buf = new StringBuffer();

   buf.append(str);

System.out.println(buf);

}

}

 

 

  • StringBuffer变为String:所有对象都有一个将对象变为String的方法,使用toString()方法。

 

    package cn.mldn.demo;

public class TestDemo{

public static void main(String[] args) throws Exception {

      

String str  =  "hello";   //字符串,子类为父接口实例化

   StringBuffer buf = new StringBuffer();

   buf.append(str);

System.out.println(buf.toString());

}

}

 

4.实际上StringBuffer还是有一些String类没有的特点:

  • StringBuffer支持字符串反转:public StringBuffer reverse()
    package cn.mldn.demo;

public class TestDemo{

public static void main(String[] args) throws Exception {

        StringBuffer buf = new StringBuffer("HelloWorld") ;

        System.out.println(buf.reverse());

}

}

 

  • 删除指定范围的数据:public StringBuffer delete(int start,int end)
    package cn.mldn.demo;

public class TestDemo{

public static void main(String[] args) throws Exception {

        StringBuffer buf = new StringBuffer("HelloWorld") ;

        System.out.println(buf.delete(5,10));

}

}

 

 

  • 插入数据:public StringBuffer insert(int offset,数据类型 b)

 

    package cn.mldn.demo;

public class TestDemo{

public static void main(String[] args) throws Exception {

        StringBuffer buf = new StringBuffer("HelloWorld") ;

        System.out.println(buf.delete(5,10).insert(0,"你好"));

}

}

 

 

四、面试题:

请解释String、StringBuffer、StringBuilder的区别:

  • String的内容不可修改,StringBuffer与StringBuilder的内容可以修改。
  • StringBuffer采用同步处理,属于线程操作,而StringBuilder采用异步处理,属于线程不安全操作。

 

 

五、总结

任何时候优先考虑String、StringBuffer,而StringBuilder只是备选方案