java中没有引用传递验证

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的结果

从结果中可以看出,传递仅仅是把参数的所有值都复制了一份(包括对象的地址),传递到了具体方法中。言语可能说的不够清楚,下面画图解释。

 

由图所示:相信已经一目了然了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值