问题描述
- 结果为什么不是//AB,AB
-
public class Foo {
public static void main(String[] args) {
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operator(a,b);
System.out.println(a+","+b);
}
public static void operator(StringBuffer x,StringBuffer y){
x.append(y);
y=x;
}
}
解决方案
实参中的a b假设指向了buf1 buf2两个对象
调用函数,相当于用x y指向buf1 buf2(x=a y=b,但是x y和a b是两套)
现在让x指向y也就是buf1,但是原来的a b还是没有改变指向。
解决方案二:
y=x;改变了y的引用,但是不会作用到实参上。
正确的写法是
x.append(y);
y.setLength(0);
y.append(x.toString())
解决方案三:
y=x试图重新设置y这个引用变量指向地址(即指向a的地址),但不会成功。因为java方法参数都是传值调用,在方法中对于参数值的修改并不会实际修改外部相应的变量,也即是说operator(a,b)之后,b引用变量中的值(即new StringBuffer("B")对象的地址)并没有改变,因此System.out.println(a+","+b);打印的结果应该是:AB,B
解决方案四:
我有点不太明白,为什么a的值改变了,b的值没有改变呢,能不能麻烦再解释一下,什么是传值调用?
时间: 2024-11-02 05:07:00