传参传的到底是什么?

282 阅读2分钟

本人在封装一些基本方法的时候遇到过一个问题,我把对象当做参数传到方法里,然后在方法中对这个对象进行了一些修改,但是等我再去输出对象的值和属性时,却发现这些数据并没有修改成功。经过查阅资料发现,方法传参传进去的只是值,修改这些值不会对对象本身造成什么影响,下面用两个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;
	}

这个例子举得有些不巧当,封装过之后更麻烦了,方法总结起来就是一句话,在处理完数据之后,一定要有一步赋值的代码,这样才能保证数据跟对象名有正确的映射。

往期文章精选

  1. java一行代码打印心形
  2. Linux性能监控软件netdata中文汉化版
  3. 接口测试代码覆盖率(jacoco)方案分享
  4. 性能测试框架
  5. 如何在Linux命令行界面愉快进行性能测试
  6. 图解HTTP脑图
  7. 写给所有人的编程思维
  8. 将json数据格式化输出到控制台
  9. 如何测试概率型业务接口
  10. 将swagger文档自动变成测试代码
  11. Mac+httpclient高并发配置实例
  12. httpclient处理多用户同时在线

公众号地图 ☢️ 一起来~FunTester