首先直接说一下结论:
C或C++中函数的参数传递包括:值传递、指针传递、引用传递这三种方法
Java中的函数的参数的传递方式只有一种:值传递;其中java函数的传递方法很多人都会存在一定的误解,
对于C/C++的函数参数传递方式大家应该是比较清楚了,有疑问请参见我的请参见我的另一篇博客
下面我们着重讨论下java中函数的参数传递:
对于普通的基本类型,大家应该都知道只是值传递,就是传递的值只是实参的值的一个复制,
但是对于对象的传参大家都可能会误以为是跟C++里面类似的引用传递,但是事实上却并非如此。
可能大家对这样的概念可能会一时无法理解,请听我解释一下
虽然传递对象参数的时候我们可以更改对象的状态,其原理是什么,实参的值的一份copy传给了形参,实参的值其实就是对象在内存中的地址,所以形参就获得了对象在内存中的地址,就可以对对象的状态进行更改,但是无论怎么更改,到最后实参的值,即,内存中某个对象的地址的值是不会发生变化的。所以说java函数传值只有一种就是值调用
如下
public class I{
private int i;
I(int i){
this.i=i;
}
public int getI(){
return i;
}
}
public class Test {
public static void main(String[] args){
I test1=new I(1);
I test2=new I(2);
System.out.println(test1.getI()+","+test2.getI());
swap(test1,test2);
System.out.print(test1.getI()+","+test2.getI());
}
public static void swap(I i1,I i2){//进行两个类的交换
I i3;
i3=i2;
i2=i1;
i1=i3;
}
}
运行结果如下
输出结果说明了,test1和test2并没有发生变化,也就是证明了java中对象在函数中的传递方法也是值传递