答案:class ValHold{
public int i = 10;
}
public class ObParm{
public static void main(String argv[]){
ObParm o = new ObParm();
o.amethod();
}
public void amethod(){
int i = 99;
ValHold v = new ValHold();
v.i=30;
another(v,i);
System.out.println(v.i);
}//End of amethod
public void another(ValHold v, int i){
i=0;
v.i = 20;
ValHold vh = new ValHold();
v = vh;
System.out.println(v.i+ " "+i);
}//End of another
}
/*
1) 10,0, 30
2) 20,0,30
3) 20,99,30
4) 10,0,20
程序执行的两句输出语句的顺序是
System.out.println(v.i+ " "+i);
//in public void another(ValHold v, int i)
System.out.println(v.i);
//in public void amethod()
看上面一句输出System.out.println(v.i+ " "+i)之前的语句,
ValHold vh = new ValHold();
//new了一块空间,vh为指向这块空间的引用,这块空间所存储的i值为10
v = vh;
//将对刚才的空间的引用赋值给v,现在v所指的空间合vh相同,就是刚才new得到的,所以v.i的值为10
第一条输出语句输出为10,0
再来看第二条输出语句,记住一点java方法的传值是by value的。
传入一个对ValHold类的引用,这个引用本身在方法结束后不会改变(就是它所指的空间不会改变),
能改变的是引用所指空间中的变量的值,
public void another(ValHold v, int i)中的语句v.i = 20;就是改变的传入引用所指的空间中的变量i的值,
所以第二句输出语句执行时,引用v所指空间的i值已经变成20,所以输出为20
最后总的输出就是10,0,20
*/
上一个:DOM概览
下一个:Corba客户端调用EJB的例子来了,呵呵