标签:oid 不能 call val public this static 内容 修改
按值调用(call by value):表示方法接收的是调用者提供的值
按引用调用(call by reference):表示方法接收的是调用者提供的地址
一个方法可以修改传递引用所对应的变量值,而不能修改传递值调用所对应的变量值
对于java来说,是不存在引用调用的,它总是按值调用
如何理解红字?方法是得到所有参数值的一个拷贝,方法无法修改传递给它的任何变量值的内容
示例1:
public static void main(String[] args) { int temp = 0; int x = 10; int y = 11; System.out.println("before: " + x + " "+ y); // x = 10, y = 11 temp = y; y = x; x = temp; System.out.println("after: " + x + " "+ y); // x = 11, y = 10 }
实例2:
public static void main(String[] args) { int temp = 0; int x = 10; int y = 11; System.out.println("before: " + x + " "+ y); // x = 10, y = 11 change(x, y); System.out.println("after: " + x + " "+ y); // x = 10, y = 11 } public static void change(int x, int y) { int temp = 0; temp = y; y = x; x = temp; }
我们可以看到,一个方法不可以改变基本数据类型参数但是,却可以通过引用类型来改变参数:
示例:
public static void main(String[] args) { Test t1 = new Test("James", 15); plus(t1); System.out.println(t1.age); // 输出25 } public static void plus(Test t){ t.age += 10; } } class Test { String name; int age; public Test(String name, int age) { super(); this.name = name; this.age = age; }
最后,我们来试验一下引用类型是否可以对象交换:
示例:
public static void main(String[] args) { Test t1 = new Test("James", 15); Test t2 = new Test("Alice", 20); System.out.println(t1 + " " + t2); //t1 = test.Test@15db9742, t2 = test.Test@6d06d69c swap(t1, t2); System.out.println(t1 + " " + t2); //t1 = test.Test@15db9742, t2 = test.Test@6d06d69c } public static void swap(Test t1, Test t2) { Test temp = t1; t2 = t1; t1 = temp; } } class Test { String name; int age; public Test(String name, int age) { super(); this.name = name; this.age = age; } public Integer plus(Integer age){ age += 10; return age; }
依旧是无法实现的
标签:oid 不能 call val public this static 内容 修改
原文地址:http://www.cnblogs.com/nothingAJ/p/6657382.html