是否可以在Java中编写交换方法?

2022-08-31 19:42:08

问题是:编写一个交换两个变量的方法。这两个变量应该是基元。它不需要是通用的,例如两个变量。有没有办法?!int


答案 1

虽然不可能编写一个仅交换两个变量的函数,但可以编写一个帮助器函数,允许您:

  • 仅使用一个语句交换两个变量
  • 调用方代码中没有临时变量
  • 没有“拳击”基元
  • 通过几个重载(其中一个使用泛型),它适用于任何类型

这就是你如何做到这一点:

int returnFirst(int x, int y) {
    return x;
}
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 = ab
  3. 该函数执行,返回的原始值并忽略其新值b
  4. 将结果分配给a

如果太长,您可以选择较短的名称以使代码更紧凑(例如)。用它来打动你的朋友,迷惑你的敌人:-)returnFirsta = sw(b, b = a)


答案 2

如果不使用数组或对象,不,就不可能在方法中执行此操作。


推荐