上面定义了一个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); } }结果
1true1.这里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
总结:对象传递,是引用传递,会改变方法外原来的对象。所以调用方法会改变原来的对象参数。
值传递,不会改变方法外原来的参数,所以需要设置返回值接收改变后的状态。
