什么是StringBuffer类?
StringBuffer类和String类相似,都可以存放字符串吗,但不同的是,StringBuffer字符串代表的是可变的字符序列,即可以对对象多次进行修改,并且不产生新的未使用对象;而String字符串是不可更改的常量。
附:创建StringBuffer类对象的语法格式
StringBuffer 变量名 = new StringBuffer(默认参数);
为什么使用StringBuffer类?
当需要对字符串进行修改,并且不产生新的对象(节省内存)时,需要使用StringBuffer类。
下面举实例以说明:
实例1:连接字符串
public class Test {
public static void main(String[] args) {
String name = "Tom";
name = name + "cat";
System.out.println(name);
}
}
(使用String类实现字符串的连接)
在上面代码段中,我们首先应该知道,String字符串是常量不可更改,在运行到第四行代码时JVM在堆中创建了对象“Tom”,而运行到第五行时JVM创建新的对象:在“Tom”的基础上加上“cat”而生成的“Tomcat”对象。在这段代码的运行过程中共计生成了两个对象。
而若使用StringBuffer则可以不用创建新的对象,直接对原对象进行修改,即在原对象“Tom”的基础上在其后面加上“cat”。‘
public class Test {
public static void main(String[] args) {
StringBuffer name = new StringBuffer("Tom");
name.append("cat");
System.out.println(name);
}
}
(使用StringBuffer类中的append()方法实现字符串修改)
实例2:多次修改字符串
public class Test {
public static void main(String[] args) {
String name = "Tom";
for (int i = 0; i < 20; i++) {
name = name + "cat";
}
System.out.println(name);
}
}
如果对String类字符串多次连接新的字符串,上面已经提到,这种方法会产生很多空闲对象可能导致Java执行效率变低,甚至发生内存溢出。
而若对StringBuffer类字符串多次添加新的字符串片段,则不必创建新的对象,直接对原对象进行修改操作,可以得到同样的结果并且内存消耗更少。
public class Test {
public static void main(String[] args) {
StringBuffer name = new StringBuffer("Tom");
for (int i = 0; i < 20; i++) {
name.append("cat");
}
System.out.println(name);
}
}
StringBuffer类常用方法
1.append()方法
作用:append(各种类型参数)用于将参数的数据加入到内存中对象缓冲区的末尾。
举例:(举例参考“实例1”中第二段代码)
2.reverse()方法
作用:reverse()方法用于将StringBuffer类字符串的所有字符倒置。
举例:
public class Test {
public static void main(String[] args) {
StringBuffer name = new StringBuffer("Tom");
name.reverse();
System.out.println(name);
}
}
运行结果为:
moT
附:String类中“+”的含义
例如下面一行代码:
String name = "T"+"om";
符号“+”在上面代码中代表“字符串连接符”的意思。
值得注意的是,在上述代码运行过程中,JVM仅仅创建了一个对象,即“Tom”,原因是因为,在代码编译过程中,JVM识别到“+”符号,将两段字符串连接成一个字符串,因此在运行过程中,JVM只给其创建一个对象。