所以经过以上的例子,有些人可能认为java是按引用调用的,实际上这种理解是不对的。下面举出一个反例:
编写一个交换两个雇员对象的方法:
public static void swap(Employee x, Employee y)
{
Employee temp = x;
x = y;
y = temp;
}
如果是按引用调用的那么应该可以实现对换数据的效果:
Employee a = new Employee("Alice"...);
Employee b = new Employee("Bob"...);
swap(a,b);
但是,并没有改变存储在变量a和b中的对象引用,swap方法其实交换的是 方法中的xy的引用,也就是a和b的拷贝。 对于方法外的ab是没有影响的。
这个过程说明了java对对象采用的也不是按引用调用,也是按值调用的。
总结java中方法参数的使用情况:
1.一个方法不能修改一个基本数据类型的参数。
2.一个方法可以改变一个对象参数的状态。(比如修改这个对象中的某个属性值)
3.一个方法不能让对象参数引用一个新的对象。(这句话我的理解是不管你在函数中怎么折腾传进来的那个对象的引用,函数结束了之后对外面都没什么效果,当然了,如果修改了引用对象内的属性,那就属于情况2的情况了。这句话是对交换的例子的总结)
总之,java是按照传值调用的,而不是引用,希望以上的例子和解释能给新手或者对这部分不太清楚的同学们些帮助,如果有不恰当的地方,还请指教。
谢了!