传值还是传引用???(Call By Value???)

前言:

    在讨论这个问题之前,我们先来看一个简单的问题来预热一下:

    我们说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中传递参数时,一律指的是变量所存储的值(对象的话,传递的就是对象所指向的地址值),无论是哪种类型的变量都是如此。

猜你喜欢

转载自blog.csdn.net/los_ATend/article/details/79364855