Java中仅存在值传而不是引用传递

2020-10-09  本文已影响0人  VincentTown

结论:Java中仅存在值传递而不存在引用传递

这是一个十分容易犯错的地方,甚至很多时候老师也没有注意到这个问题。

首先给出一个例子来证明这个问题


class Solution {

public void swap(char []a){

char []temp =new char[]{'1','2','3'};

        a = temp;

        System.out.println("test:" + a);

    }

public static void main(String[] args) {

char []test =new char[]{'4','5','6'};

        System.out.println("test:" + test);

        Solution solution =new Solution();

        solution.swap(test);

        System.out.println(Arrays.toString(test));

    }

}

这段代码的操作是,更换原字符数组的指向。原数组指向['4','5','6'],如果Java中是引用传递的话,使用swap()函数可以改变外部指针的指向,进而将test 指向的数组改为['1','2','3']。实验结果如下:

我们不难test的指向仍为['4','5','6']这从侧面反应了java中不是引用传递了,说明Java中是值传递。但根据我们的经验,我们可以通过函数修改数组中的值,那这又是怎么一回事呢?

不妨用下图来进行解释:

我们是将指向数组的值进行复制,当你更改复制后的的指向是不能改变原来指向的。

同理,我们用复制后的指向仍然是可以修改数组中的值。

总结

我们可以通过钥匙开门的例子来进行对比,引用就是直接把开门的钥匙递给你,而值传则是将钥匙进行了复制。

当然这两把钥匙都给打开同一个门,也能对门中的元素进行操作。但终究他们不是一把钥匙。

上一篇 下一篇

猜你喜欢

热点阅读