Java调用函数传递参数到底是值传递还是引用传递
首先先声明一下,在Java中函数传参是值传递,不是引用传递。要弄清楚这个问题之前要先弄清楚什么是值传递,什么是引用传递。
值传递(pass by value):是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
引用传递(pass by reference
-
首先我们想看看值传递
package com.wecredo.agency.test; /** * @author 2S * @date 2020/8/31 16:22 * @Description 值传递 */ public class ValuePassTest { public static void main(String[] args) { int a = 1; //传递基本数据类型,因为是将a的值传递给param,所以即便在pass函数中改变了 //参数的值,a的值还是不会变。所以我们认为在传递基本数据类型的时候是值传递 pass(a); System.out.println("a= " + a); } private static void pass(int param) { param = 2; System.out.println("param= " + param); }
}
我们再看看引用传递打印的结果
-
我们再看看引用传递
package com.wecredo.agency.test; /** * @author 2S * @date 2020/8/31 16:22 * @Description 引用传递 */ public class Box { int num; } /** * 这里传递的是一个对象,引用传递 */ class CheckBox { public void check(Box box){ box.num=100; } public static void main(String[] args) { Box box=new Box(); box.num=10; System.out.println("调用之前box.num:"+box.num); CheckBox checkBox=new CheckBox(); checkBox.check(box); //如果值修改了,就说说明是引用传递 System.out.println("调用之后box.num:"+box.num); } }
我们再看看引用传递打印的结果
总结:基本类型和String类型传递时,都是值传递(String类型可以自行尝试一下),其他类型都是引用传递