public class TransferParamTest {
static class Demo {
int a;
public Demo(int a) {
this.a = a;
}
}
private static void function1(Demo d1, Demo d2) {
int a;
a = d1.a;
d1.a = d2.a;
d2.a = a;
}
private static void function2(Demo d1, Demo d2) {
Demo temp;
temp = d1;
System.out.println("初始d1 = " + d1);
System.out.println("初始temp = " + temp);
d1 = d2;
System.out.println("复制后d1 = " + d1);
System.out.println("初始d2 = " + d2);
d2 = temp;
d2.a = 3;
System.out.println("复制后d2 = " + d2);
}
@Test
public void test1() {
Demo d1 = new Demo(1);
Demo d2 = new Demo(2);
System.out.println(d1.a + " " + d2.a);
function1(d1, d2);
System.out.println(d1.a + " " + d2.a);
}
@Test
public void test2() {
Demo d1 = new Demo(1);
Demo d2 = new Demo(2);
System.out.println("初始 主方法中d1.a=" + d1.a + ",初始 主方法中d2.a= " + d2.a);
function2(d1, d2);
System.out.println("调用方法后 主方法中d1.a = " + d1.a + "调用方法后 主方法中d2.a= " + d2.a);
System.out.println("调用方法后 主方法中d1 = " + d1);
System.out.println("调用方法后 主方法中d2=" + d2);
}
}
test1中打印结果:
很多人会觉得,根据结果,不就说明是引用传递吗?其实并不是,我们再来看test2的结果
从结果中可以看出,传递仅仅是把参数的所有值都复制了一份(包括对象的地址),传递到了具体方法中。言语可能说的不够清楚,下面画图解释。
由图所示:相信已经一目了然了