Java方法调用时传递参数问题

博主是大三的在校大学生,学习计算机的路上,有些自己的感悟,写下来互相讨论下,欢迎吐槽。

我们都知道将参数传递给方法时有两种,第一种是按值调用(called by value)表示方法接收的是调用者提供的值,第二种是按引用传递(called by reference)表示方法接收的是调用者提供的变量的地址。方法可以修改传递引用所对应的变量值,而不能修改传递值调用的所对应的变量值。比如:

public void swap(int x,int y){
	int m=y;
	y=x;
	x=m;
}
这样很明显是不可以交换的,如果用c++引用可以做到,或者指针也可以做到。

java方法参数类型共有两种类型,一是基本数据类型,二是对象引用,当对象的引用作为参数时,对象引用来修改对象里面的值。但是很多人存在一个误区,认为java可以像c++那样有对象引用的交换的功能,但是实际上是不对的,java总是采用的是按值调用,方法得到的是所有参数值的一个拷贝,方法不能修改传递给它的任何参数变量的内容。例如:

class test{
       test a;
       test b;
       swap(a,b);
       public void swap(test x,test y){
		test te;
		te=x;
		x=y;
		y=te;
	}
}

如果java是对对象的采用是引用调用,那么这个方法是可以进行对象的交换的,但是方法并没有改变存储在变量a和b中的引用,也就是说swap方法的参数x和y被初始化两个对象的引用的拷贝,只是引用计数加1,方法结束时参数x和y的被丢弃,a,b还是仍然引用这个方法调用之前的所引用的对象。

因此实际上java对对象引用进行的是值传递。

总结下:

一个方法不能修改一个基本数据类型的参数。

一个方法可以改变一个对象参数的状态。

一个方法不能让对象参数引用一个新的对象。

相关文章
相关标签/搜索