public static void A(String a){
a="new TALString";
}
public static void B(StringBuffer a){
a=new StringBuffer("new TALStringBuffer");
}
public static void main(String[] ars){
String a=new String("TALString");
StringBuffer b=new StringBuffer("TALStringBuffer");
A(a);
B(b);
System.out.println(a);
System.out.println(b);
return;
}
输出结果:
TALString
TALStringBuffer
实参:如果是8种基本类型或者String,则实参不会变(传的是值);
如果是对象集合或者数组,则实参会改变(传的是引用)。
当StringBuilder作为形参时:
public static void B(StringBuffer a){
//a=new StringBuffer("new TALStringBuffer");
a.append("new");
}
则输出:
TALStringBuffernew
用append函数实参则会发生改变
public static void B(StringBuffer a){
a=new StringBuffer("new TALStringBuffer");
a.append("new");
}
则输出:
TALStringBuffer
new了一个新的StringBuffer对于原实参的StringBuffer不影响
故在String作为形参时,由于String的不可变性,在作形参时形参和实参分别指向了不同的字符串,由于StringBuilder的可变性,形参还是在实参的基础上继续添加新的字符串。