小弟对下面程序的输出结果实在想不明白,请大家多多指教
public class Test {
public static void main(String[] args) {
StringBuffer a=new StringBuffer ( "A ");
StringBuffer b=new StringBuffer ( "B ");
oper(a,b);
System.out.print(a+ ", "+b);
}
static void oper(StringBuffer c,StringBuffer d){
c.append( "B ");
d=c;
}
}
此小程序的输出结果是;AB,B;但是我实在想不明白.我认为应该为:AB,AB;为什么用append赋值的结果与直接赋值的结果不一样那?
------解决方案--------------------可以通过参数的引用对对象进行操作,但是不可以改变参数引用的值
相当于参数是两个人,进入方法的时候两个人都是闭着眼的,但是你可以针对这两个人做 "睁眼 "操作,那么人出去的时候眼是睁开的,但是不能把人都给换掉了,进来的是张三李四,出去的还是张三李四
------解决方案--------------------debug
------解决方案--------------------问题在引用类型参数的传递上
在你的程序中当把b引用传递给d引用时,只不过是在oper方法内部又新建了一个StringBuffer类型的引用d,并且d指向内存中的“B”对象,在程序一开始的时候b引用就指向了“B”对象,所以在执行oper函数的时候有两个引用指向“B”对象,oper中执行d=c时将引用d指向了“AB”对象
而b引用仍然指向“B”对象,所以输出结果为AB,B
------解决方案--------------------到你的开发环境中,设置断点,调试一下,看看你的变量的值的变化