先看一下代码,猜猜下面的程序会输出什么?
package com.wjy.test;
public class Batman extends Father{
private int index;
public Batman(int index){
this.index=index;
}
private static void change(StringBuffer d)
{
d=new StringBuffer("nihao");
}
private static void change(Batman d)
{
d=new Batman(111);
}
public static void main(String args[]){
// StringBuffer stringBuffer=new StringBuffer("hello");
// change(stringBuffer);
Batman batman=new Batman(222);
change(batman);
System.out.println(batman.index);
}
}
结果输出:
222
1.问题分析:既然调用了change(Batman d)就将对象batman传递进了change函数中,关键就在这里:
change(Batman d)的形参d执行了这样的操作:将实参batman传递给形参d。虽然d=new Batman(111);实际上在change函数退出的时候,d这个对象已经销毁了。所以输出结果为:222;
2.假设在change(Batman d)里面将d=new Batman(111);改为d.index=111;
这样子输出结果:111。
分析:将batman赋值给了d。这样子d也指向了batman。通过d可以访问到batman的数据。而上一个例子d被重新定向指向了一个新的Batman的对象Batman(111)。所以根据d.index=111;可以修改batman的index的域的值。