public class Test3 { public static void change(int a){ a=50; } public static void main(String[] args) { int a=10; System.out.println(a); change(a); System.out.println(a); }} 输出的 是10,10。main方法中将a传递给change方法,change方法中会对传递过来的参数进行copy,所以change中的a是实参复制出来的一个变量。change中的a的改变与实参无关。
public class Test3 { public static void change(int []a){ a[0]=50; } public static void main(String[] args) { int []a={10,20}; System.out.println(a[0]); change(a); System.out.println(a[0]); }} 输出结果为10 50。实际传递的是引用的地址值。形参获取到实参所指向的地址的指针。改变形参的值相当于改变实参指向地址的值,所以实参指向的值会改变。
class Emp { public int age;}public class Test { public static void change(Emp emp) { emp.age = 50; emp = new Emp();//再创建一个对象 emp.age=100; } public static void main(String[] args) { Emp emp = new Emp(); emp.age = 100; System.out.println(emp.age); change(emp); System.out.println(emp.age); System.out.println(emp.age); }}
输出为:100 50 50.
首先,方法中改变了对象的值,所以age为50,然后创建了一个新的对象,新的对象的指针放在了emp里。这时的emp和传递过来的emp所指向的地址不同了。最后设置age为100,是对新建的Emp对象的设置。也就是说,后来新建的emp相当于change方法中的私有变量,作用域只在change方法里。而传递过来的emp的指针是不会改变的。所以打印的emp是实参指向的空间。