引用传递--交换数值的问题

2017-03-26  本文已影响250人  senninha

引用传递--交换数值的问题

如下代码,返回的经过了swapTest()方法后输出的i1,i2是否交换了呢。。。
public class SwapTest {
    
    private void swapTest(Integer i1,Integer i2){
        Integer tem = i1;
        i1 = i2;
        i2 = tem;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Integer i1 = new Integer(1);
        Integer i2 = new Integer(2);
        new SwapTest().swapTest(i1, i2);
        System.out.println(i1 +":" + i2);
    }

}

run一下:
1:2
药丸啊,没有交换。。。

来来分析一下:

//这时候传入的只是i1,i2的那个内存引用
    new SwapTest().swapTest(i1, i2);

//然后在方法里i1,i2非调用时的i1,i2,再怎么去互换他的引用,也不影响在调用时候的引用啦。。。
    private void swapTest(Integer i1,Integer i2){
        Integer tem = i1;
        i1 = i2;
        i2 = tem;
    }

来来,如果交换的是全局的引用,比如这样:

public class SwapTest {
    private static Integer i1 = new Integer(1);
    private static Integer i2 = new Integer(2);
    private void swapTest(){
        Integer tem = i1;
        i1 = i2;
        i2 = tem;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new SwapTest().swapTest();
        System.out.println(i1 +":" + i2);
    }

}

输出结果:
2:1

因为这里交换的引用就是要输出的那个引用,所以能起到交换的效果。。

上一篇 下一篇

猜你喜欢

热点阅读