一.前言
在String类中,用直接赋值的方式给String类型变量赋值时,就像下面代码这样,会在堆中的常量池里创建一个常量,然后将该常量的地址赋给栈中的变量:
String name="k9999";
当以如下这种方式时,叫做字符串的拼接,在常量池中还是只创建了一个对象:
String name="k9999"+"om";
但是初始化后假如以如下这种凡是再次赋值时,在常量池中就会创建两个对象,一个是初始化时的k99,一个是赋值过后创建的k9999:
String name="k99";
name=name+"99";
也就是说如果将上面的字符串拼接方式循环50次,在常量池中就会创建50个对象,这对堆中的内存空间是一种极大的损耗:
for(int i=0;i<50;i++) {
String name="k99";
name=name+"99";
}
那么如何解决这个问题呢?
二.StringBuffer的使用
StringBuffer就是一个用来解决字符串拼接赋值时占用内存空间问题的类,它和String类的作用基本相同,只是它在进行字符串拼接赋值时在堆中不会保留之前的值,所以无论拼接赋值多少次,堆中始终只有一个对象。
以下是使用StringBuffer创建对象的代码:
public class Test {
public static void main(String[] args) {
StringBuffer name=new StringBuffer("k9999");
}
}
这里要注意的是StringBuffer类只能通过new调用构造方法来给对象赋值,用直接赋值的方式就会报错。
三.StringBuffer中的方法
1.append(String str)
append(String str)方法在StringBuffer类中就是用来实现字符串拼接的,像刚才String类中的那个for循环代码,在StringBuffer类中就如下实现:
public class Test {
public static void main(String[] args) {
StringBuffer name=new StringBuffer("k99");
for(int i=0;i<50;i++){
name.append("99");
}
}
}
2.reverse()
reverse()的作用是将一个字符串倒置,调用代码如下:
public class Test {
public static void main(String[] args) {
StringBuffer name=new StringBuffer("k9999");
System.out.println(name.reverse());
}
}