一、方法参数的传递
实参给形参赋值:
基本数据类型传递:数据值
引用数据类型传递:地址值
注意: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是值传递。