您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> js >> 正文

一道方法参数相关题

作者:作者:未…    信息学院来源:网络收集    点击数:    更新时间:2006-8-27 我要参与讨论

  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

*/  

在google里搜索更多一道方法参数相关题

Google
Web www.51ec.org
  • 上一篇信息学院:

  • 下一篇信息学院:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    我来说两句 对此文章发表了评论
      昵 称: *必填    ·注册用户·
      评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
    评 论
    内 容

     
    评论列表 (最新 评论仅限网友观点!)

    推荐文章
  • 此栏目下没有推荐信息学院
  • 供求信息




    | 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明