java 引用传递例子_java 值传递与引用传递(示例代码)
在java中
值传递:基本数据类型(四类八种)与枚举类型 --- 传递的是值的副本
引用传递:对象是引用传递 ---传递的是对象的引用--底层逻辑也是地址的副本
列:
1 classA{2 int name1 =10;3 int name2 =50;4 }5 public classB{6 public static voidmain(String args[]){7 A a = newA();8 swap(a);9 System.out.prinln(a.name1,a.name2);10
11 }12
13 public static voidswap(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的值并没有发生改变;
在java中 值传递:基本数据类型(四类八种)与枚举类型 --- 传递的是值的副本 引用传递:对象是引用传递 ---传递的是对象的引用--底层逻辑也是地址的副本 列: 1 classA{2 int name1 =10;3 int name2 =50;4 }5 public classB{6 public static voidmain(String args[]){7 A a = newA();8 swap(a);9 System.out.prinln(a.name1,a.name2);10 11 }12 13 public static voidswap(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的值并没有发生改变;