class MyValue{
public int val;
}
public class TestSwap {
public static void swap(MyValue myv1,MyValue myv2){
int tmp= myv1.val;
myv1.val= myv2.val;
myv2.val=tmp;
}
public static void main(String[] args) {
MyValue val1 = new MyValue();
MyValue val2 = new MyValue();
val1.val=10;
val2.val=20;
swap(val1,val2);
System.out.println(val1.val);
System.out.println(val2.val);
}
}
运行结果:
val1,val2这两个引用的类型是MyValue;
为什么传引用才能真正的发生交换呢?
我们可以画个内存图来看一下:
myv1和myv2分别接收的是val1和val2的值,他们都是引用类型的。这里有点类似于c语言的指针,引用里面存的就是地址,通过地址找到对象从而实现真正的交换。
如果MyValue的成员变量用private修饰:
class MyValue{
private int val;
public int getVal() {
return val;
}
public void setVal(int val) {
this.val = val;
}
}
public class TestSwap {
public static void swap(MyValue myv1,MyValue myv2){
int tmp= myv1.getVal();
myv1.setVal(myv2.getVal());;
myv2.setVal(tmp);
}
public static void main(String[] args) {
MyValue val1 = new MyValue();
MyValue val2 = new MyValue();
val1.setVal(10);
val2.setVal(20);
swap(val1,val2);
System.out.println(val1.getVal());
System.out.println(val2.getVal());
}
}