知识点:
- StringBuffer类的主要特点。
- StringBuffer、StringBuilder、String的区别。
具体内容:
回顾:String类的特点
- String类对象两种实例化方式:
直接赋值:只开辟一块堆内存空间,可以自动入池。
构造方法:开辟两块堆内存空间,不会自动入池,使用inter()手工入池。
2. 任何一个字符串都是String类的匿名对象。
3.字符串一旦声明则不可改变,可以改变的只是String类对象的引用。
4.不可以改变是一个大问题,为此在java里面提供了另外一个类——StringBuffer类(里面的内容可以修改)。
String类对象可以使用”+“进行字符串的连续操作,但是在StringBuffer类里面必须使用append()方法进行追加。
- 方法:public StringBuffer append(数据类型,变量)
范例:观察StringBuffer基本使用
package 算法;
public class TestDemo {
public static void main(String args[]){
//与String可以直接赋值不同,必须进行对象实例化
StringBuffer buf = new StringBuffer();
buf.append("hello").append("world").append("!!");
change(buf);
System.out.println(buf);
}
public static void change(StringBuffer temp){
temp.append("\n").append("Hello MLDN.");
}
}
发现StringBuffer类的内容是可以进行修改的,而String的内容是不可以修改的。
清楚了StringBuffer类的基本使用与操作之后,继续观察两个类之间的区别.
String类 | StringBuffer类 |
|
|
发现String与StringBuffer都是charSequence接口的子类。而在以后的开发中,如果看到某些方法的操作上出现的是CharSequemce接口,那么应该立刻清楚只需要传递字符串即可。
package 算法;
public class TestDemo {
public static void main(String args[]){
CharSequence seq = "hello"; //向上转型
System.out.println(seq); //String类复写toString()
}
}
虽然String和StringBuffer类有着共同的接口,但是这两个类之间如果要转换,不能够直接转换。
1.将String与StringBuffer类对象?
方式一:利用StringBuffer类的构造方法(public StringBuffer(String str))
package 算法;
public class TestDemo {
public static void main(String args[]){
StringBuffer buf = new StringBuffer("hello");
//将String变为StringBuffer
System.out.println(buf); //String类复写toString()
}
}
方式二:利用append()方法(public StringBuffer append(String str))
package 算法;
public class TestDemo {
public static void main(String args[]){
StringBuffer buf = new StringBuffer();
buf.append("hello");
//将String变为StringBuffer
System.out.println(buf); //String类复写toString()
}
}
2.将StringBuffer类变为String类
利用toString()方法可以将StringBuffer转化为String。
package 算法;
public class TestDemo {
public static void main(String args[]){
StringBuffer buf = new StringBuffer("hello");
String str = buf.toString();
System.out.println(str); //String类复写toString()
}
}
也可以利用String类的构造方法(public String (StringBuffer buffer))实现StringBuffer()。
在String类里面也提供一个和StringBuffer比较的方法:public boolean contentEquals(StringBuffer sb)
package 算法;
public class TestDemo {
public static void main(String args[]){
StringBuffer buf = new StringBuffer("hello");
System.out.println("hello".contentEquals(buf));
}
}
Sring与StingBuffer类都定义了很多方法,而且很多方法刚好互补。
1.字符串反转:public StringBuffer reverse()
package 算法;
public class TestDemo {
public static void main(String args[]){
StringBuffer buf = new StringBuffer("hello");
System.out.println(buf.reverse());
}
}
2.在指定的位置增加数据:public StringBuffer insert(int offset,数据类型 变量 )
package 算法;
public class TestDemo {
public static void main(String args[]){
StringBuffer buf = new StringBuffer("hello");
buf.insert(0,"MLDN").insert(0, "你好!");
System.out.println(buf);
}
}
3.删除部分数据:public StringBuffer delete(int start,int end)
package 算法;
public class TestDemo {
public static void main(String args[]){
StringBuffer buf = new StringBuffer("hello world!");
System.out.println(buf.delete(5, 10));
}
}
从JDK1.5之后增加了一个新的字符串操作类:StringBuffer类,这个类的定义结构如下:
-
public final class StringBuilder extends Object implements Serializable, CharSequence
发现StringBuffer类与StringBuilder类在定义上非常的相似,几乎连方法也一样。
面试题:请解释String、StringBuffer、StringBuilder的区别?
1.String的内容一旦声明则不可改变,StringBuffer与StringBuilder的内容可以改变。
2.StringBuffer类中提供的方法都是同步方法,属于安全的线程操作,StringBuilder都属于异步方法属于非线程安全的操作。
以后在开发中见到字符串基本使用String。