当前位置:编程学习 > JSP >>

一道方法参数相关题

答案: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的例子来了,呵呵

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,