class Test {
static StringBuffer sb1 = new StringBuffer("A");
static StringBuffer sb2 = new StringBuffer("B");
public static void main(String args[]) {
Test h = new Test();
h.methodA(sb1, sb2);
System.out.println(sb1 + "," + sb2);
}
public void methodA(StringBuffer x, StringBuffer y) {
y.append(x);
x = y;
}
}
输出为A,BA
x=y;只是让句柄x指向了y所指向的对象,并不是将x所指向的对象赋值为"BA",也就是说这句只是让x句柄转了指向
A method cannot modify a parameter of primitive type (that is, numbers or Boolean values).
A method can change the state of an object parameter.
A method cannot make an object parameter refer to a new object.
在JAVA当中没有所谓的地址传递,只有值传递一种方式。我们来看看代码
static StringBuffer sb1=new StringBuffer("A");
static StringBuffer sb2=new StringBuffer("B");
sb1-->"A"; sb2-->"B";
在methodA方法调用中
h.methodA(sb1,sb2);
sb1-->x, sb2-->y
那么x-->"A"; y-->"B";
public void methodA(StringBuffer x,StringBuffer y) {
y.append(x);//相当于sb2.append(sb1),sb2所引用的StringBuffer对象已经改变。
//即sb2=y-->"BA"
x=y;//x-->"BA";但是由于在JAVA当中只有值传递一种方式,sb1根本没有改变,所以sb1-->"A";
}
最后System.out.println(sb1+","+sb2);
得到了结果:A,BA