问题是:编写一个交换两个变量的方法。这两个变量应该是原语。它不需要是通用的,例如二int
变量。有办法吗?!
虽然不可能编写一个简单地交换两个变量的函数,但可以编写一个辅助函数这使您能够:
- 使用交换两个变量只有一个声明
-
没有临时变量在调用者的代码中
-
没有“拳击”原语
- 通过一些重载(其中之一使用泛型),它适用于任何类型
这就是你可以做到的:
int returnFirst(int x, int y) {
return x;
}
<T> T returnFirst(T x, T y) {
return x;
}
// other overloads as needed
int a = 8, b = 3;
a = returnFirst(b, b = a); // try reading this as a = b; b = a;
System.out.println("a: " + a + ", b: " + b); // prints a: 3, b: 8
这是有效的,因为 Java 语言保证(Java 语言规范,Java SE 7 版,第 15.12.4.2 节)所有参数都是从左到右计算的(与某些其他语言不同,其中计算顺序未定义),因此执行顺序是:
- 的原始值
b
进行评估以便作为第一个参数传递给函数
- 表达方式
b = a
被评估,结果(新值b
) 作为第二个参数传递给函数
- 函数执行,返回原始值
b
并忽略它的新价值
- 您将结果分配给
a
If returnFirst
太长,您可以选择较短的名称以使代码更紧凑(例如a = sw(b, b = a)
).
假设您需要一个接一个地交换许多不同类型的变量。通过使用 returnFirst 就不需要 intAux、objAux 等。在某处错误使用错误变量的风险较小,因为没有额外的变量(至少在调用者中)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)