java语言总是使用传值调用。这也意味着方法得到的只是所有参数值的拷贝。因此,方法不能修改传递给它的任何参数变量的内容。

方法参数共有两种:

基本类型(数字,布尔值)

对象引用

方法不能改变基本类型的参数。但对于对象参数来说,情况则有所不同。

我们可以很容易地实现一个方法,把员工的薪金增至3倍。


public static void tripleSalary(Employee x)
{
x.raiseSalary(200);
}

执行调用:

harry = new Employee(...);
tripleSalary(harry);

的具体工作过程如下:

1、x被初始化为harry值的一个拷贝,即一个对象引用。

2、向此对象引用应用raiseSalary方法。x和harry都指向那个Employee对象的薪金被提高了200%

3、方法结束后,参数变量x不再使用。但对象变量harry继续指向薪金被增至3倍的那个对象。

 

以下代码用来证明针对类对象确实是值传递,而非引用传递

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并未进行交换。

 

下面归纳了Java程序设计语言中利用方法参数可以做到和不能做到的几种情况:

1、方法不能修改基本类型(即数字或布尔值)的参数。

2、方法可以修改对象参数的状态

3、方法不能让对象参数指向新的对象。