一、值传递(只有基本类型和String str = “Java测试”;是值传递)
1.值传递(参数拷贝):方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值。
public class TempTest {
public static void main(String[] args) {
int num = 30;
System.out.println("调用add方法前num=" + num);
add(num);
System.out.println("调用add方法后num=" + num);
}
public static void add(int param) {
param = 100;
}
}
//调用add方法前num=30
//调用add方法后num=30
二、引用传递
1.引用传递:也成传地址(也就是变量所对应的内存空间的地址)。方法调用时,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
public class TempTest {
public static void main(String[] args) {
String[] array = new String[] {"test,world!"};
System.out.println("调用reset方法前:" + array[0]);
reset(array);
System.out.println("调用reset方法后:" + array[0]);
}
public static void reset(String[] param) {
param[0] = "hello,world!";
}
}
//调用reset方法前:test,world!
//调用reset方法后:hello,world!
三、实战
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
值传递。
原因:Java编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用。对象的内容可以在被调用的方法中改变,但是对对象的引用是永远不会改变的。