java方法的参数传递机制
一、方法参数的传递
实参给形参赋值:
基本数据类型传递:数据值
引用数据类型传递:地址值
注意:String 、包装类型等对象不可变性
/** * java的参数传递机制测试类 * 实参给形参赋值 * 基本数据类型传递:数据值 * 引用数据类型传递:地址值 * String、包装类型等对象不可变性 */ public class ParamTransmitTest { public static void main(String[] args) { int i = 1; String str = "hello"; Long l = 200l; int[] arr = {1,2,3,4,5}; MyData myData = new MyData(); change(i, str, l, arr, myData); System.out.println("i = " + i); System.out.println("str = " + str); System.out.println("l = " + l); System.out.println("arr[0] = " + arr[0]); System.out.println("myData.a = " + myData.a); } public static void change(int j, String str, Long l, int[] arr, MyData m) { j += 1; str += "world"; l += 1; arr[0] += 1; m.a += 1; System.out.println("i = " + j); System.out.println("str = " + str); System.out.println("l = " + l); System.out.println("arr[0] = " + arr[0]); System.out.println("myData.a = " + m.a); System.out.println("change --------"); } static class MyData{ private int a = 10; } }
运行结果:
i = 2 str = helloworld l = 201 arr[0] = 2 myData.a = 11 change -------- i = 1 str = hello l = 200 arr[0] = 2 myData.a = 11
二、java是值传递还是引用传递
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
值传递是传递实参副本,函数修改不会影响实参;引用传递是传递实参地址,函数修改会影响实参。
我们区分值传递还是引用传递的关键在于实参是否被函数所修改,对于引用对象来说内存地址值才是实参,被调用的函数并不会对引用对象的实参地址值进行改变。因此java是值传递。