01.class Test
02.{
03.public static void main(String[] args)
04.{
05.int i = 0;//对a进行赋值为0,局部变量
06.test(i);//这里相当于将局部变量i=0,复制一份给了test(i)方法中的i,并没有改变5行中i的值.改变的是方法test(i)中的局部变量i,
//如果把test(i)写成test(n),这样就不会被变量的名字混淆了;
07.System.out.println(i);//这里打印的i是main方法的局部变量i,由于i并没有改变,所以打印的是0
08.}
09.public static void test(int i)//这里传入的是int类型的10,并不是变量i,改变的是test方法中的局部变量i而已
10.{
11.i++;
12.}
13.}
14.
15.
16.public class Test
17.{
18.public static void main(String[] args)
19.{
20.int[] a=new int[1]; //定义数组,数组是引用类型,new int[1]会在堆内存中开辟空间,而int[] a 则存在栈内存中,a为new int[i]的引用,即a存的是数组对象的地址.
21.test(a); //将数组a传入方法test(int[] a)中,相当于test方法中的int[]型局部变量a得到了数组对象new int[1]的地址值,然后也指向了这个对象
22.System.out.println(a[0]);//所以,此处访问对象的第一个元素,已经做了一次自增操作,即为1
23.}
24.public static void test(int[] a)//test方法中的局部变量a得到了数组对象的地址值,做a[0]++时,是对new int[1]对象中的第一个元素进行了改变
25.{
26.a[0]++;
27.}
28.}
第二种情况中,main方法中的变量和test方法中的变量都指向了同一个数组对象,所以调用test(a)方法改变了该数组对象中元素的值后,main方法输出的也是改变后的值,嘿,刚刚学会的 |