class Test
{
public static void main(String[] args)
{
int i = 0;
test(i);这句代码执行完i值不应该是变成1了吗?
System.out.println(i);为什么打印i=0
}
public static void test(int i)
{
i++;
}
}
public class Test
{
public static void main(String[] args)
{
int[] a=new int[1];
test(a);
System.out.println(a[0]);这里打印的是1,和上面的区别在哪里?
}
public static void test(int[] a)
{
a[0]++;
}
} 作者: 王阳 时间: 2013-1-16 23:16
首先,java方法的形参只有值传递,而传递基本类型为基本类型的数值,传递引用类型为引用类型的地址值副本。所以传递基本类型时,只是栈中多创建了一个变量,所以方法内不会改变方法外的原始变量的值,而引用传递,传递的是地址值的副本,既栈中又有一个地址指向堆中的数组对象,由于原始变量也指向堆中这个数组,所以自然就是会跟着方法内所变化作者: 王溢君 时间: 2013-1-16 23:20
public static void test(int i)
{
i++;
}这里的i是局部变量,和上面的成员变量i不是同一个。i++之后,又没有返回,打印的是上面的成员变量i的值,内存地址不一样。