在java中
值传递:基本数据类型(四类八种)与枚举类型 --- 传递的是值的副本
引用传递:对象是引用传递 ---传递的是对象的引用--底层逻辑也是地址的副本
列:
1 class A{ 2 int name1 =10; 3 int name2 =50; 4 } 5 public class B{ 6 public static void main(String args[]){ 7 A a = new A(); 8 swap(a); 9 System.out.prinln(a.name1,a.name2); 10 11 } 12 13 public static void swap(A a){ 14 int temp = a.name1; 15 a.name1 = a.name2; 16 a.name2 = temp; 17 18 } 19 }out:50,10
上面发现name1和name2的值发生了交换,这证明了传递到swap()中的是对象的地址,说明这是引用传递;
例
class A{ int name1 =10; int name2 =50; } public class B{ public static void main(String args[]){ A a = new A(); swap(a); System.out.prinln(a.name1,a.name2); } public static void swap(A a){ a = new A(); int temp = a.name1; a.name1 = a.name2; a.name2 = temp; } }out:10,50
我们发现当我们在swap()方法中重新new了一个新对象,那么这样必然·发生在jvm堆内存中开辟了一块新的空间,并将新的空间复制给了dome,其中这个Dome是属于一个局部变量,只是作用于swap()方法之中,在这方法中的值确实是进行了交换,但是在这作用域外的name1,name2的值并没有发生改变;
原文地址:https://www.cnblogs.com/yishengyouzai/p/10489893.html
时间: 2024-10-30 08:46:43