前言:
在讨论这个问题之前,我们先来看一个简单的问题来预热一下:
我们说Java中的“=”用作普通基本类型时,是将值赋值给一个变量;而用作对象时,是将o1参考的地址也给o2参考,其实本质上也是将o1储存的值赋值给o2;
正文:Call By Value!!!
一.我们先来看第一个例子:当调用some()方法时,你做的是将x指定给参数y,而之后y被修改为。这个例子的很简单(输出结果为10),相信大家都能看懂。
public void go() {
int x = 10;some(x);
System.out.println(x);
}
private void some(int y) {
y = 100;
}
二.刚才是在讨论基本类型,现在我们来看用作对象时,到底是传递值还是引用?,废话不多说,先来看一个例子:
public void go() {
Customer c = new Customer();
c.name = "Justin";
some(c);
System.out.println(c.name);
}
private void some(Customer cust) {
cust.name = "caterpillar";
}
大家先猜一下答案,对了,就是caterpillar,你猜对了吗,猜对了也不要骄傲,你真的理解了吗?如果你学过C++(没学过的同学不必纠结于此,继续往下看),也许会把这叫传引用,其实不然,上面的操作不过是将c的地址传递给了cust,由于c和cust指向同一块内存,所以当cust改变name的值时,c的name值也会改变。在Java中当你从方法中return一个对象时,其行为也是类似的,就不再多作说明了。
三.总结:
在Java中传递参数时,一律指的是变量所存储的值(对象的话,传递的就是对象所指向的地址值),无论是哪种类型的变量都是如此。