核心: java在方法传递参数时,是将变量代表的值复制一份,然后传入方法体去执行。对于基本数据类型,变量代表的值为值本身,对于引用数据类型,变量代表的值为对象的引用地址。
public class Test {
public int m =10;
public static void main(String[] args) {
int j = 1;
String s = "hello";
Integer n = 200;
int[] a = {1,2,3,4,5};
Test e = new Test ();
change(j,s,n,a,e);
System.out.println("j= "+j); //1,基本类型,栈中变量存值而非对象的引用
System.out.println("s= "+s); //hello,字符串,不可变对象
System.out.println("n= "+n); //200,包装类,不可变
System.out.println("a= "+ Arrays.toString(a)); //[2,2,3,4,5]
System.out.println("e.m= "+e.m); //11
}
/**
* 方法的参数传递机制
* java所有的参数传递都是传递的都是变量所代表的值副本。
* 1.形参是基本数据类型--传递数据值
* 2.形参是引用数据类型--传递地址值
* 注意:String、包装类等对象不可变性,
* 此类对象发生改变将会在堆内存中生成一个新的对象,
* 并将参数变量的引用指向新生成对象的内存地址。
*/
public static void change(int j,String s,Integer n,int[] a,Test e){
j+=1;
s+="world";
n+=1;
a[0]+=1;
e.m+=1;
}
}