参数传递

 首先下结论:Java中所有方法的参数传递都是按值调用。

  在C中,方法的参数传递分为两种:值调用和引用调用。值传递表示方法接收到的是调用者提供的值;按引用调用表示方法接收到的是调用者提供的变量地址。

  在Java中,方法总是采用按值调用的方法来传递参数,也就是说,在Java中所有的方法得到的都是所有的参数值的一个拷贝。特别的是,方法不能修改传递给它的任何参数变量的内容。

  下面是参数为基本数据类型的情况:

public static void tripleValue(double x){
    x = 3 * x;
}

main{
double a = 10;
tripleValue(a);
}

 

得到结果是:10

下面看一下具体的执行过程:

1,x被初始化为percent值得一个拷贝(也就是10)

2,x被乘以3后等于30.但是此时a仍然是10

3,这个方法结束之后,参数变量x不再使用。如下图所示

下面我们来看参数是对象引用的情况:

trupleSalary(Emploee x){
    x.raiseSalary(200);
}

main{
    harry = new Employee(...);
    trypleSalary(harry);
}

得到结果是三倍的薪水。具体的执行过程如下:

1,x被初始化为harry的拷贝。这里是一个对象的引用

2,raiseSalary方法应用于这个对象的引用。x和harry同时引用的那个Employee对象的薪金提高了200%;

3,方法结束后,参数变量x不再使用。当然,对象变量harry继续引用那个薪金增至3倍的雇员对象。如下图所示

方法得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象

说明:对象引用在这里实际上也是按值传递的。而非引用调用

 

posted @ 2019-10-29 16:21  Joey777210  阅读(115)  评论(0编辑  收藏  举报