本人在封装一些基本方法的时候遇到过一个问题,我把对象当做参数传到方法里,然后在方法中对这个对象进行了一些修改,但是等我再去输出对象的值和属性时,却发现这些数据并没有修改成功。经过查阅资料发现,方法传参传进去的只是值,修改这些值不会对对象本身造成什么影响,下面用两个int类型的对象交换数据来演示这个错误时如何发生的。
首先这是错误的代码:
int a = 1, b = 2;
output("a:" + a, "b:" + b);
changeNum(a, b);
output("a:" + a, "b:" + b);
下面是交换数据的方法:
public void changeNum(int a,int b) {
int i = a;
a = b;
b = i;
}
下面是控制台输出结果:
第1个:a:1
第2个:b:2
第1个:a:1
第2个:b:2
可以看出来,什么都没有变化。下面是正确的代码:
int a = 1, b = 2;
output("a:" + a, "b:" + b);
int i = a;
a = b;
b = i;
output("a:" + a, "b:" + b);
可以看到a和b的值已经完成了交换。如果是想写一个交换数据的方法,只能在返回值上做文章了,代码如下:
int a = 1, b = 2;
output("a:" + a, "b:" + b);
int[] abc = changeNum(a, b);
a = abc[0];
b = abc[1];
output("a:" + a, "b:" + b);
下面是封装的方法:
public int[] changeNum(int a, int b) {
int[] abc = { b, a };
return abc;
}
这个例子举得有些不巧当,封装过之后更麻烦了,方法总结起来就是一句话,在处理完数据之后,一定要有一步赋值的代码,这样才能保证数据跟对象名有正确的映射。