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