名词解释:
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。(这相当于原有内存空间不会受影响)
引用传递:也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,所以方法执行中形式参数的改变将会影响实际参数。(这相当于原有内存空间中的值被改变了)
引用传递示例:
package horace.com; class A{ int temp = 10; } public class Demo01 { public static void main(String[] args) { A a = new A(); a.temp = 20; System.out.println(a.temp); tell(a); System.out.println(a.temp); } public static void tell(A a2){ a2.temp = 30; } }
显示的结果为
20 30
值传递示例:
package horace.com; class B{ public void tell(int temp){ temp = 30; System.out.println("tell()方法中,temp的值"+temp); } } public class Demo02 { public static void main(String[] args) { int temp =20; B b =new B(); b.tell(temp); System.out.println("原有temp的值,或者说main方法中temp的值:"+temp); } }
显示的结果为:
tell()方法中,temp的值30 原有temp的值,或者说main方法中temp的值:20
从上面可以看出来,引用传递,是将内存空间的地址传递给其他对象,这样无论谁更改都会改变该内存空间的存放的数据;值传递是将内存空间存放的数值传递给其他对象,对原来内存空间存放的数据不会造成影响。