java实参与形参
形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。
实参出现在主调函数中,进入被调函数后,实参变量也不能使用。
形参和实参的功能是作数据传送。
发生函数调用时, 主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。
1、形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。
因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。
2、实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,
它们都必须具有确定的值,以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。
3、实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。
4、函数调用中发生的数据传送是单向的。
即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。
因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。
------来自百度知道
package shunxu;
public class shunxun {
public int add(int i,int j) {
return j=i+j;
}
public static void main(String[] args) {
int m=1;
int n=2;
shunxun shunxun =new shunxun();
n= shunxun.add(m, n);
System.out.println(n);
}
}
上面定义了一个add函数,带有形参i,j 形参:就是一个形式上的参数,并无具体的值
m,n是传入函数的具体实际的参数,称为实参
这个add函数 就是一个封装思想的方法,类似3D打印机,只是给他一个模型,他就自己对照着开始工作,并且执行完毕,过程中对模型(实参)无影响
这个过程实参就是这个模型,形参是3D打印机工作的原材料入口(描述了都可以给什么模型,控制输入格式),当对照一个实参的时候,打印机自己装配原材料,接下来一系列过程只对原材料进行操作,所以对模型(实参)无影响
简单理解,实参是实在存在的模型,形参是控制跟生成跟模型一样的原材料,所以函数只对形参有影响,对实参无改变。
列个例子,从某个网站看的面试题
public class Tester{
public static void main(String[] args){
Integer var1=new Integer(1);
Integer var2=var1;
doSomething(var2);
System.out.print(var1.intValue());
System.out.print(var1==var2);
}
public static void doSomething(Integer integer){
integer=new Integer(2);
}
}
结果
1true
1.这里var1先new 了一个对象Integer 1
2.然后让var2指向var1这个引用,也就是指向了integer 1
3.接着调用了doSomething(var2); 注意var2现在是模型,也就是实参,doSomething这个打印机只根据这个模型的样子制造了新的材料,integer,所以这时候integer是指向跟var2一样指向integer 1,
4.然后就开始执行integer=new Integer(2);这时候integer引用指向了新的对象Integer(2);
5.也就是说从始至终var2只是提供了一个模型的功能,不参与函数内部过程。所以var2无改变还是指向integer 1
而改变的是integer从一开始的指向integer 1,到新new一个对象 指向了Integer(2);
直接把其中一个解析拉过来看吧 我感觉讲的挺好 @anhoulin
总结:对象传递,是引用传递,会改变方法外原来的对象。所以调用方法会改变原来的对象参数。
值传递,不会改变方法外原来的参数,所以需要设置返回值接收改变后的状态。
还没有评论,来说两句吧...