美文网首页程序员程序园
为什么说Java的方法参数传递总是值传递

为什么说Java的方法参数传递总是值传递

作者: 小布_cvg | 来源:发表于2019-05-01 15:03 被阅读3次

java中方法的传递总是值传递,也就是传递的是实际参数的拷贝。

定义一个方法

void swap(int x,int j){
    int z = x;
    x = j;
    j = z;
}

这是一个交换函数,熟悉C语言的朋友肯定能一眼就看出这个程序有问题:

x 和 j 传递进入方法中后,方法中使用的是实际参数的两个拷贝,交换的也是拷贝的对象,方法执行完毕后,对象都会销毁,而外部的实际参数没有改变。在Java中也是这样。

但上面的例子形式参数是java的基本类型,有些朋友认为如果对象类型作为参数,传递的是对象的引用,也就是引用调用。实际上,这种理解方式是不对的,而且这种理解还具有普遍性。所以下面给出了Java核心技术卷里面的一个例子来详细的阐述一下这个问题。

void swap(Employee x,Employee y){
    Employee z = x;
    x = y;
    y = z;
}

这里Employee只是普通的Java对象

如果对象作为参数传递的是引用,那么结果会是x与y交换了,但是实际上的输出结果也没有发生变化。

其实这个例子和上面的例子一样,进入方法时候,x,y是实际参数的拷贝,x,y在方法内部交换,并不会对外面的实际参数产生影响,而且方法执行完毕后,x与y就会销毁。这里画一张图可以很好的说明:

001.png

交换的是执行时栈里面的引用,执行完后会被销毁,实际参数没有变化。

相关文章

网友评论

    本文标题:为什么说Java的方法参数传递总是值传递

    本文链接:https://www.haomeiwen.com/subject/spxwnqtx.html