A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张天强 初级黑马   /  2012-6-11 01:24  /  1542 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

之前看论坛有几个帖子的都是关于形参和实参 学习了一下还是不是很理解参数的传递,他是实参与形参的结合问题,举个形参的例子,以及参数传递的例子,在代码中实参与形参标明。

5 个回复

倒序浏览
参是你定义方法时约定的参数类型,实参就是你实际传递过来的参数。private static int paramater(int a){        //这里a为形参
                return a;
        }
        public static void main(String[] args) {
                paramater(12);        //这里12是实参
        }
        形参就是一个模型,就像我们铸零件一样,先要有一个模具,然后把铁熔化了,放在模具里,一冷却便会成为我们想要的零件,当然我们也可以把铝熔化倒在里面冷却。那么这形参就是这个模具,它提供了一种解决问题的方法模型,而实参就是这倒进去冷却的物质,是解决问题的原材料,形参一旦定义就是确定的,可以把各种符合条件的实参传递给它,这就像不同的物质都可以放在模具里铸零件一样!所谓的符合条件无非就是说实参和形参之间要保持类型的一致!!

回复 使用道具 举报
楼上的江南太牛叉了,晚上一两点答题,并且把炼铁的事情都搞出来了,佩服佩服,
其实没有那么麻烦,简单的说,就是形参就是形式蚕食,就是指变量,实参就是实际的参数,就是变量所对应的值
个人之见,仅供参看
回复 使用道具 举报
不是蚕食,而是参数,个人打字时的错误
回复 使用道具 举报
  1. class TestPrimitiveTransfer
  2. {
  3.         public static void swap(int a,int b)
  4.         {
  5.                 //下面三行代码实现a,b变量的值交换
  6.                 //定义一个临时变量来保存a的值
  7.                 int temp = a;
  8.                 //把b的值赋给a
  9.                 a = b;
  10.                 //把临时变量temp的值赋给b
  11.                 b=temp;
  12.                 System.out.println("swap 方法里,a的值是:"+a+";b的值是:"+b);
  13.     }
  14.         public static void main(String[] args)
  15.         {
  16.                 int a=6;
  17.                 int b=9;
  18.                 swap(a,b);
  19.         System.out.println("交换后,实参a的值是:"+a+";实参b的值是:"+b);
  20.         }

  21. }
复制代码
运行结果:swap 方法里,a的值是:9;b的值是:6
交换后,实参a的值是:6;实参b的值是:9
      当程序执行swap方法时,系统进入swap方法,并将main方法中的a,b变量作为参数值传入swap方法,传入swap方法的是a,b的副本,而不是a,b本身,进入swap方法后系统中产生了4个变量,main方法栈区2个,swap方法栈区2个。
    在main方法中调用swap方法时,main方法还未结束,因此,系统分别为main方法和swap方法分配两块栈区,分别保存main方法和swap方法的局部变量。main方法中的a,b变量作为参数传入swap方法,实际上是在swap方法栈区中重新产生了两个变量a,b,并将main方法栈区中a,b变量的值分别赋给swap方法中的a,b参数,就是swap方法的a,b进行了初始化吧。此时系统中有两个a变量,两个b变量,只是存在与不同的方法栈区中而已。
    程序在swap方法交换a,b两个变量的值,实际是对swap方法中的a,b变量进行交换,main方法中的a,b变量并未有任何改变。这就是值传递:当系统开始执行方法时,系统为形参执行初始化,就是把实参变量的值赋给方法的形参变量,方法了操作的并不是实际的实参变量。
回复 使用道具 举报
呵呵,打个比方吧,函数就像一个工厂,他的形参列表就是工厂运转需要的“原料清单”,返回值就是工厂运转后产生的“产品”,而实参就是你交给给工厂的“原料”。
对于由8个基本类型(boolean,byte,short,char,int,long,float,double)组成的“原料清单”,当你把“原料”(实参)交给工厂(函数)的时候,工厂(函数)自己就会“复制”出来一份相同的“原料”供自己使用,而不会使用你给他的,工厂会用自己的“原料”生产出“产品”,你的“原料”不会变。这就是“值传递”
如果工厂的“原料清单”里有引用类型(数组,类,枚举)的时候,当你把“原料”交给工厂时,此时因为需要的“原料”很复杂,工厂就不会复制了,而是拿你给他的那份“原料”来生产产品,这样你的“原料”经过工厂的一阵捣鼓,就发生了变化。这就是“引用传递”
这是我的一个老师讲课是打的比喻,我觉得挺贴切的,希望对你有帮助。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马