java中形参与实参的区别

 形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。 
形参和实参的功能是作数据传送。发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。

    1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能
再使用该形参变量。 

    2.实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,
输入等办法使实参获得确定值。 

    3.实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。 

    4.函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,
而实参中的值不会变化。
  
  参看如下一段代码和它的运行效果:
  

[java]  view plain  copy
  1. import java.util.ArrayList;  
  2.   
  3. public class Test{  
  4.      
  5.    public Test(){  
  6.       int tempParam=1;  
  7.       Integer tempObj=1;  
  8.       increseParam(tempParam);  
  9.       increseObj(tempObj);  
  10.       System.out.println("result_1=:"+tempParam);  
  11.       System.out.println("result_2=:"+tempObj);  
  12.       tempParam=increseParam(tempParam);  
  13.       tempObj=increseObj(tempObj);  
  14.       System.out.println("result_3=:"+tempParam);  
  15.       System.out.println("result_4=:"+tempObj);  
  16.         
  17.       String tempString="TEST";  
  18.       anaString(tempString);  
  19.       System.out.println("result_5=:"+tempString);  
  20.       tempString=anaString(tempString);  
  21.       System.out.println("result_6=:"+tempString);  
  22.   
  23.       ArrayList<String> list=new ArrayList<String>();  
  24.       list.add("AAAAA");  
  25.       list.add("BBBBB");  
  26.       list.add("CCCCC");  
  27.       System.out.println("size1=:"+list.size());  
  28.       clearList(list);  
  29.       System.out.println("size3=:"+list.size());  
  30.   
  31.   
  32.       ArrayList<String> list2=new ArrayList<String>();  
  33.       list2.add("AAAAA");  
  34.       list2.add("BBBBB");  
  35.       list2.add("CCCCC");  
  36.       System.out.println("sizeA=:"+list2.size());  
  37.       newList(list2);  
  38.       System.out.println("sizeC=:"+list2.size());  
  39.    }  
  40.   
  41.    public int increseParam(int i){  
  42.       i++;  
  43.       return i;  
  44.    }  
  45.     
  46.    public int increseObj(Integer i){  
  47.       i++;  
  48.       return i;  
  49.    }  
  50.   
  51.    public String anaString(String str){  
  52.        str=str+"_APPEND";  
  53.        return str;  
  54.    }  
  55.   
  56.    public void clearList(ArrayList<String> list){  
  57.        list.clear();  
  58.        System.out.println("size2=:"+list.size());  
  59.    }  
  60.   
  61.    public void newList(ArrayList<String> list){  
  62.        list=new ArrayList<String>();  
  63.        list.add("DDDDD");  
  64.        System.out.println("sizeB=:"+list.size());  
  65.    }  
  66.   
  67.    public static void main(String[] args){  
  68.       new Test();  
  69.    }  
  70. }  

运行效果:


        从这个例子中可以看出,可以在方法内部通过方法参数列表中传递过来的对象的引用(形参)来控制对象(通过对象对应的类中的方法),但是不能重建这个引用原来所对应的对象(实参),在方法中对引用所做的重建只是在方法内部起作用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值