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出来对象的调用者。
|