String和StringBuffer的區別詳解
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