无需使用任何临时变量即可交换两个变量的值。该方法涉及使用 +、*、/ 和按位等运算符。
方法 1:使用 + 运算符
在下面的示例中,+ 运算符用于交换两个变量 x 和 y 的值。
public class MyClass {
static void swap(int x, int y) {
System.out.println("Before Swap.");
System.out.println("x = " + x);
System.out.println("y = " + y);
//交换技术
x = x + y;
y = x - y;
x = x - y;
System.out.println("After Swap.");
System.out.println("x = " + x);
System.out.println("y = " + y);
}
public static void main(String[] args) {
swap(10, 25);
}
}
上面的代码将给出以下输出:
Before Swap.
x = 10
y = 25
After Swap.
x = 25
y = 10
方法 2:使用 * 运算符
与 + 运算符一样,* 运算符还可以用于交换两个变量 x 和 y 的值。
public class MyClass {
static void swap(int x, int y) {
System.out.println("Before Swap.");
System.out.println("x = " + x);
System.out.println("y = " + y);
//交换技术
x = x * y;
y = x / y;
x = x / y;
System.out.println("After Swap.");
System.out.println("x = " + x);
System.out.println("y = " + y);
}
public static void main(String[] args) {
swap(10, 25);
}
}
上面的代码将给出以下输出:
Before Swap.
x = 10
y = 25
After Swap.
x = 25
y = 10
方法三:使用/运算符
同样,/运算符也可以用来交换两个值变量x和y。
public class MyClass {
static void swap(float x, float y) {
System.out.println("Before Swap.");
System.out.println("x = " + x);
System.out.println("y = " + y);
//交换技术
x = x / y;
y = x * y;
x = y / x;
System.out.println("After Swap.");
System.out.println("x = " + x);
System.out.println("y = " + y);
}
public static void main(String[] args) {
swap(10, 25);
}
}
上面的代码将给出以下输出:
Before Swap.
x = 10.0
y = 25.0
After Swap.
x = 25.0
y = 10.0
方法4 : 使用按位运算符
按位XOR (^)运算符还可以用于交换两个变量x和是。当两个操作数中相同位置的两位中的一位为 1 时,返回 1,否则返回 0。
public class MyClass {
static void swap(int x, int y) {
System.out.println("Before Swap.");
System.out.println("x = " + x);
System.out.println("y = " + y);
//交换技术
x = x ^ y;
y = x ^ y;
x = x ^ y;
System.out.println("After Swap.");
System.out.println("x = " + x);
System.out.println("y = " + y);
}
public static void main(String[] args) {
swap(10, 25);
}
}
上面的代码将给出以下输出:
Before Swap.
x = 10
y = 25
After Swap.
x = 25
y = 10
使用上述方法的缺点
- 如果其中一个变量的值为 0,则基于乘法和除法的方法会失败。
- 基于加法的方法可能会因算术溢出而失败。 。如果x和y太大,对操作数执行的操作可能会导致整数超出范围。