在谈值传递和引用传递之前,我觉得应该先说一下什么是形参和实参:
- 形参:指一个方法被调用时需要传入的参数,传入方法的参数。
- 实参:指一个方法被调用时传入的实际值。
先说一下定义吧:
- 值传递:方法被调用时,实参通过形参将它内容的副本传入方法内部。
- 引用传递:方法被调用时,实参将他的地址传给形参。
值传递
对于值传递,一般都是对于Java中基本数据类型而言的,比方说我有一个方法需要传入一个int值i ,然后里面的代码就是i=i+1,我再传入一个i进去的话,我输出这个i,传入前和传入后的值没有变化。
因为他只是将实参i的值传给了形参i,方法里面的操作都是对于形参i来说的,所以对于实参i,方法里面的操作对他来说完全没作用,所以实参i的值还是没任何变化。
引用传递
而引用传递则不同。引用传递最简单的例子就是C和C++中的指针,比方说我现在需要交换两个变量的值,就可以写一个swap函数将两个变量的指针传进去。
Java到底有没有引用传递
但是其实可以这样说,Java是没有引用传递的。我们举一个例子,比方说我现在有一个类Person,里面有些getset方法,然后我再main方法里new一个Person的对象,然后调用了一个方法,方法需要传入这个person对象,并在方法中对这个对象调用set方法,输出的话确实是新的数据。但是如果我在方法中让这个person对象等于new Person构造方法,如果按照引用传递的话,他就会输出我这个新的Person对象的数据,但是他还是输出的原数据,所以Java只有值传递。
public static void PersonCrossTest(Person person){
System.out.println("传入的person的name:"+person.getName());
person=new Person();//加多此行代码
person.setName("我是张小龙");
System.out.println("方法内重新赋值后的name:"+person.getName());
}