关于基本数据类型的值传递:

public class OverloadTest {
    public static void main(String[] args) {
        int m = 10;
        int n = 20;
        System.out.println(m + " " + n);
        OverloadTest o1 = new OverloadTest();
        o1.swap(m , n);
        System.out.println(m + " " + n);
    }

    public void swap(int m, int n){
        int temp = m;
        m = n;
        n = temp;
    }
}

这时候输出为:

10 20
10 20

因为返回值为空,做完后弹栈了,局部变量灰飞烟灭,成员变量纹丝不动

但是如果是这样呢?

public class ValueTransfer {
    public static void main(String[] args) {
        Data d1 = new Data();
        d1.m = 10;
        d1.n = 20;
        System.out.println(d1.m + " " + d1.n);
        d1.swap(d1);
        System.out.println(d1.m + " " + d1.n);

    }
}

class Data{
    int m;
    int n;
    public void swap(Data data){
        int temp = data.m;
        data.m = data.n;
        data.n = temp;
    }
}

输出为:

10 20
20 10

这时候转换成功!

因为第一个是对值复制了!

而第二个是复制地址了

一变俱变!

 posted on 2020-10-28 21:44  又在化学楼迷路了  阅读(77)  评论(0)    收藏  举报