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

这里是一个问题:写一个交换两个variables的方法。 这两个variables应该是原始的。 它不需要是通用的,例如两个intvariables。 有没有办法?

不使用数组或对象,不,不可能在一个方法内完成。

虽然不可能编写一个简单地交换两个variables的函数,但可以编写一个辅助函数 ,使您可以:

  • 只用一个语句交换两个variables
  • 在调用者的代码中没有临时variables
  • 没有“拳击”原语
  • 有一些重载(其中一个使用generics), 它适用于任何types

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

 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的原始值是为了作为第一个parameter passing给函数
  2. 评估expression式b = a ,并将结果( b的新值)作为第二个parameter passing给函数
  3. 该函数执行,返回b的原始值并忽略其新值
  4. 您将结果分配给a

如果returnFirst太长,可以select一个较短的名称来使代码更紧凑(例如a = sw(b, b = a) )。 用这个打动你的朋友,迷惑你的敌人:-)

查看这篇详细解释它的JavaWorld文章:

http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html

两个原语的交换将不会工作,因为原语是通过Java中的值传递的。 你甚至不能写一个交换两个对象的方法。

像@Thomas说的那样,你唯一能做的就是把你的原语包含在其他对象/数组中并修改它们。

你可以使@ marcus的交换方法的通用版本交换任意数量的相同types的对象:

 <T> T swap(T... args) { // usage: z = swap(a, a=b, b=c, ... y=z); return args[0]; } b = swap(a, a=b); z = swap(x, x=y, y=z); 

在java5中,我能想到的最接近的,可能对你有帮助的是:

AtomicInteger类(和其他)有getAndSet()primefaces方法..

要编写一个交换原语的交换方法,你必须有“out”variables的概念,即variables的值传递给调用上下文。 C#有这些,但你仍然必须指定他们是变数。

单数的任何原始数字:

 a += (b - (b = a)); 

这个函数将交换两个整数

 Integer[] swap(int a, int b){ return new Integer[]{b,a}; } 

这是一个交换两个原始variables的方法

 private void swap(){ int a = 1; int b = 2; int temp = a; a = b; b = temp; } 

虽然可能没有太大的用处;)

好的,如果variables是类的话,可以这样做:

 public class MyClass{ // excuse horrible coding practice of public mutable fields public int a = 1; public int b = 2; public void swap(){ int temp = a; a = b; b = temp; } } 

然而,我再也看不到这可能是什么用法

我已经阅读了上面的答案,寻求一个解释,为什么说这个交换程序不能用c ++编写的方式写在java中。 我做了以下方式程序截图

正如托马斯·欧文斯所说。 你可以在C中通过&reference来传递variables,但不使用Java而不使用对象。

是的,可以使用方法交换两个variables。 但是你应该用空的括号声明该方法,然后通过引用(空括号)来调用它 。 这是一个例子,说明使用方法交换两个variables。

公共类交换

{

 static String A="Apple"; static String B="Bat"; public static void swap() { String k; k=A; A=B; B=k; } public static void main(String[] args) { System.out.println("Before swapping"); System.out.println("A= "+A); System.out.println("B= "+B); swap(); System.out.println("After swapping"); System.out.println("A= "+A); System.out.println("B= "+B); } 

}

通过编译上面的代码,输出如下:

交换之前

A =苹果

B =蝙蝠

交换后

A =蝙蝠

B =苹果

//如果我们在被调用的方法中进行了更改,则通过引用调用原始值的情况将会改变

 public class Swap { public static void main (String[]args) { int y = 5; int x = 4; int c; System.out.println("y = "+y); System.out.println("x = "+x); c=x; //c = 4 x=y; //x = 5; y=c; System.out.println("\n"); System.out.println("y= "+y); System.out.println("x= "+x); } }