public class Test {
public static void main(String[] args) {
int a = 10;
int b = 20;
exchange(a, b);
System.out.println("a="+a);
System.out.println("b="+b);
}
public static void exchange(int a, int b) {
int c = a;
a = b;
b = c;
}
}
上面代码的运行结果是
a=10
b=20
当你定义a和b之后,将a和b带入函数时,会在栈中复制出a’和b’,然后进行计算。等计算完后,没有元素指向a’和b’之后,a’和b’被回收。所以a和b的值没有被改变。
public class Test {
public static void main(String[] args) {
Student a1 = new Student();
Student b1 = new Student();
a1.name = "张三";
b1.name = "李四";
exchange(a1, b1);
System.out.println(a1);
System.out.println(b1);
}
public static void exchange(Student a, Student b) {
Student c = a;
a = b;
b = c;
}
}
同理,Student c = a; a = b; b = c;只是把clone出来的a1’、b1’的值改变了,当没有元素指向a1’、b1’、c后,他们也会被回收,a1、b1的值没有被改变。
public class Test {
public static void main(String[] args) {
Student a1 = new Student();
Student b1 = new Student();
exchange1(a1,b1);
System.out.println(a1);//张三3 李四4
System.out.println(b1);//李四3 张三4
}
public static void exchange1(Student a, Student b) {
Student c = new Student();
c.name=a.name;
a.name=b.name;
b.name=c.name;
}
}