Java中可以写swap方法吗? [复制]

2023-11-27

问题是:编写一个交换两个变量的方法。这两个变量应该是原语。它不需要是通用的,例如二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 节)所有参数都是从左到右计算的(与某些其他语言不同,其中计算顺序未定义),因此执行顺序是:

  1. 的原始值b进行评估以便作为第一个参数传递给函数
  2. 表达方式b = a被评估,结果(新值b) 作为第二个参数传递给函数
  3. 函数执行,返回原始值b并忽略它的新价值
  4. 您将结果分配给a

If returnFirst太长,您可以选择较短的名称以使代码更紧凑(例如a = sw(b, b = a)).

假设您需要一个接一个地交换许多不同类型的变量。通过使用 returnFirst 就不需要 intAux、objAux 等。在某处错误使用错误变量的风险较小,因为没有额外的变量(至少在调用者中)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java中可以写swap方法吗? [复制] 的相关文章

随机推荐