提问:Java 对象采用的是值传递还是引用传递?
有些程序员认为 Java 对象采用的是引用调用,实际上,这种理解是不对的。下面给出一个反例来详细的阐述一下这一问题。
首先,编写一个交换两个雇员对象的方法:
public static void swap(Employee x, Employee y) |
如果 Java 程序时引用调用,那么这个方法就应该能都实现交换实际的效果。
System.out.println("\nTesting swap:"); |
但是结果 a 仍然时 Alice,b 是 Bob。对象引用进行的是值传递。
其实不必取扣是值传递还是引用传递的字眼,理解其中的原因是最好。
在调用 swap 时,a 将一个 引用的副本 传递给了 x,让 x 也指向了,相同与 a 指向的内存单元中的 Employee 对象 Alice,b 将一个引用的副本传递给了 y,让 y 也指向了,相同与 b 指向的内存单元中的 Employee 对象 Bob。
这时执行 swap 方法内部的内容,交换了 x,y 的引用指向,这是 x 指向的时 Bob,y 是 Alice,但是在方法结束后,方法外的 a,b 的指向是仍然没有变化,a 是 Alice,b 是 Bob。
书上总结
一个方法不能修改一个基本数据类型的参数。
一个方法可以改变一个对象参数的状态。
一个方法不能让对象参数引用一个新的对象。
– EOF –