在面試中被問到這個問題,想到兩種解決方式,在此分享一下。
第一種,使用簡單的數學運算達到目标(但是面試官往往會問你還有沒有其他方式):
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println("交換前:");
System.out.println("a = " + a);
System.out.println("b = " + b);
a = a + b;
b = a - b;
a = a - b;
System.out.println("交換後:");
System.out.println("a = " + a);
System.out.println("b = " + b);
}
第二種,使用位運算中的異或運算達到目标(可能才是面試官真正想考察的):
public static void main(String[] args) {
int a = 1;
int b = 2;
System.out.println("交換前:");
System.out.println("a = " + a);
System.out.println("b = " + b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("交換後:");
System.out.println("a = " + a);
System.out.println("b = " + b);
}
異或運算原理:前後兩個值的位相同為0,不相同為1,以上代碼為例:1的位就是0001,2的位為0010,第一次操作之後a = 3 (0011),第二次操作之後b = 1(0001),第三次操作之後a = 2(0010)