Java值传递(swap失效原因)

本文探讨了Java中值传递的特性,通过一个swap的例子展示了当交换对象引用时,原始对象值不变的原因。同时,解释了为何修改对象的属性会直接影响到原始引用的原因。

JAVA值传递:JAVA方法传递的是调用者提供的一份copy的值。

在对对象进行swap的时候,我们可以发现,两对象修改后的值还是原来的值如下

Public static void main(String[] args){

       Student target1 = new Student ("张伟",23);

       Student target2 = new Student ("吴天",24);

       swap(target1,target2);

       System.out.println(target1+":"+target2);//输出后,仍然target1的name和age还是张伟23;target2的name和age还是吴天24

}

public void swap(Student s1,Student s2){

       Student s3 = new Student();

       s3 = s1;

       s1 = s2;

       s2 = s3;

}起初swap实线调用

Swap实际只是把s1和s2断开并交换(如虚线)

 


可是,为什么如果我调用s2的引用的属性,做改变时,target1的属性引用也会改变呢。原因如下:

Public static void main(String[] args){

       Student target1 = new Student ("张伟",23);

       Student target2 = new Student ("吴天",24);

       swapII(target1,target2);

       System.out.println(target1+":"+target2);//输出后,仍然target1的name和age还是张伟23;target2的name和age还是吴天24

}

public void swapII(Student s1,Student s2){

       Student s3 = new Student();

       s3 = s1;

       s1.setAge (s2.getAge);

       s2.setAge(s3.getAge);

}

SwapII实际只是把末端tartget1(copy)和tartget2(copy)的age引用给互调互调了。由于这是target1和target2引用的各自new Student()的地址,所以,改变引用对象内属性的引用的时候也会影响到,调用target1和target2所new出来对象的调用者。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值