首页 > 代码库 > java中引用传递和值传递的理解
java中引用传递和值传递的理解
按值调用(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; }
依旧是无法实现的
总结:
- 一个方法不能修改基本数据类型的参数
- 一个方法无法修改对象参数的状态
- 对象参数可以通过对象引用来改变
java中引用传递和值传递的理解
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。