JSP学习笔记(五十一):参数传递的一个问题
今天在群上,有一朋友问了一个问题,我觉的挺经典的,纪录如下:
public class Qcb90 {
int a;
int b;
public void f() {
a = 0;
b = 0;
int[] c = { 0 };
g(b, c);
System.out.println(a + " " + b + " " + c[0] + " "); //为什么输出的是1 0 1 啊????
}
public void g(int b, int[] c) {
a = 1;
b = 1;
c[0] = 1;
}
public static void main(String args[]) {
Qcb90 obj = new Qcb90();
obj.f();
}
}
输出结果是1 0 1
其实这个结果不难理解,我们一个一个的看:
a:这是一个全局变量,g方法里更改了a的值,a最终值为1
b:b也是一个全局变量,只是调用g方法的时候,默认更改的是g方法内部的b,如果要修改全局的b,需要把代码b=1修改为this.b=1
c:c是一个对象,传递的是引用,这不同于a、b,传递的值。