之前阅读《Head First Java》的时候,记得里面有提到过,Java在调用方法,传递参数的时候,采用的是pass-by-copy的方法,传递一份内容的拷贝,即传值。
举一个最简单的例子:

 1 public class Test {
 2     public static void main(String[] args) {
 3         int numberA = 1;
 4         int numberB = 2;
 5         swap(numberA, numberB);
 6         System.out.println(numberA);
 7         System.out.println(numberB);
 8     }
 9     
10     public static void swap(int a, int b) {
11         int c = a;
12         a = b;
13         b = c;
14     }
15 }

这里,swap(int a, int b)方法的目的是交换参数a, b 的值,不过这是不会实现的。

虽然在方法里面将变量a的值赋给了一个临时变量temp,再将变量b的值赋给了a,最后将temp的值赋给了b。这个时候,b中保存的是之前a中的值,a中保存的也是b中的值,起码在swap()方法里面,ab的值已经交换过来了。
但是请注意,Java调用参数的方法是pass-by-copy,也就是说,虽然在swap()方法里,参数ab(所谓的形参)获取了 numberA 和 numberB 的值(所谓的实参),但是获取值的方法是拷贝了实参的值赋给形参,并不是让形参直接指向实参在内存中的地址(所谓的指针)。
所以,这段代码输出的结果是:

1
2
点击查看

相关文章: