1. StringBuffer和String的区别
* String是一个不可变的字符序列
* StringBuffer是一个可变的字符序列
* 无参构造方法,Sting为空字符初始容量为0,StringBuffer初始容量为16
2.StringBuffer和String的相互转换
* A:String -- StringBuffer
* a:通过构造方法
* b:通过append()方法
//创建一个String对象
String string="nihao";
System.out.println(string);
//方式一:构造方法
StringBuffer stringBuffer5=new StringBuffer(string);
System.out.println(stringBuffer5);
//方式二:通过append方法
StringBuffer stringBuffer6=new StringBuffer();
stringBuffer6.append(string);
System.out.println(stringBuffer6);
* B:StringBuffer -- String
* a:通过构造方法
* b:通过toString()方法
* c:通过subString(0,length);
//创建一个StringBuffer对象
StringBuffer stringBuffer7=new StringBuffer("world");
System.out.println(stringBuffer7);
//方式一:通过构造方法
String string2=new String(stringBuffer7);
System.out.println(string2);
//方式二:通过toString方法
String string3=stringBuffer7.toString();
System.out.println(string3);
//方式三:通过subString(0,length);
String string4=stringBuffer7.substring(0, stringBuffer7.length());
System.out.println(string4);
3.String和StringBuffer分别作为参数传递
* A:形式参数问题
* String作为参数传递:传递的是参数的地址,随着方法的结束该地址被回收,原来的对象指向的地址不发生改变,但是方法中的对象指向的地址发生了改变* StringBuffer作为参数传递 :append方法是根据对象的地址来修改值,不再创建新的对象,因此指向的地址都是一样的,改地址的值被永久的修改
* B:案例演示
* String和StringBuffer分别作为参数传递问题
案例1:
package wbl.test;
public class StringBuffer_Test11
{
public static void main(String[] args)
{
test("word");
StringBuffer stringBuffer=new StringBuffer("nihao");
StringBuffer stringBuffer2=new StringBuffer("shijie");
test1(stringBuffer,stringBuffer2);
System.out.println(stringBuffer+" , "+stringBuffer2 );
}
public static void test(String string )
{
System.out.println(string);
string="niaho";
System.out.println(string);
}
/**
* 方法中stringBuffer=stringBuffer2;stringBuffer指向的是stringBuffer2的地址,
* 所以stringBuffer=shijie;stringBuffer2修改是根据他的地址修改的值,所以该地址的值被永久
* 的修改,方法结束后,stringBuffer不再指向stringBuffer2的地址,而是本身的地址,没有改变,
* stringBuffer发生了改变为:shijieshijie
* @param stringBuffer
* @param stringBuffer2
*/
public static void test1(StringBuffer stringBuffer ,StringBuffer stringBuffer2)
{
stringBuffer=stringBuffer2;
stringBuffer2=stringBuffer2.append(stringBuffer);
System.out.println(stringBuffer+" , "+stringBuffer2 );
}
}
结果为:
niaho
方法中:shijieshijie , shijieshijie
方法结束后:nihao , shijieshijie
案例2:
package wbl.test;
public class StringAndStringBuffer_qubie{
public static void main(String[] args)
{
String str1="nihao";
System.out.println("String作为参数传递前:"+str1);
change(str1, "world");
System.out.println("String作为参数传递后:"+str1);
StringBuffer sb1=new StringBuffer("world");
System.out.println("StringBuffer作为参数传递前:"+sb1);
change(sb1, sb1);
System.out.println("StringBuffer作为参数传递后:"+sb1);
}
public static void change(String string,String string2)
{
string=string2;
System.out.println("方法中的值为:"+string);
}
public static void change(StringBuffer sb1,StringBuffer sb2)
{
sb1=sb1.append(sb2);
System.out.println("方法中的值为:"+sb1);
}
}
结果:
String作为参数传递前:nihao
方法中的值为:world
String作为参数传递后:nihao
StringBuffer作为参数传递前:world
方法中的值为:worldworld
StringBuffer作为参数传递后:worldworl