昨天面试的时候问到了这个,回答了异或的方式,后来自己又想了一下,总结这么几种
/**
*
*/
package test;
import java.util.Stack;
/**
* <p>
* Title:NoNeedThreeChange
* </p>
* <p>
* Description:
* </p>
*
* @author 田茂林
* @data 2017年8月25日 上午9:08:13
*/
public class NoNeedThreeChange {
public static void changewithoperate(int a, int b) { //利用加减运算符
a = a - b;
b = a + b;
a = b - a;
System.out.println("a =" + a);
System.out.println("b =" + b);
}
public static void changewithoperateY(int a, int b) { //利用异或的原理
a = a ^ b;
b = a ^ b; // 一个数和自己的异或为0,任何一个数和0异或是它本身
a = a ^ b;
System.out.println("a =" + a);
System.out.println("b =" + b);
}
public static void changewithStack(int a, int b) { //利用栈的后进先出原理
Stack<Integer> s= new Stack<Integer>();
s.push(a);
s.push(b);
System.out.println("a =" + s.pop());
System.out.println("b =" + s.pop());
}
public static void main(String[] args) {
int a = 10;
int b = 20;
changewithoperate(a, b);
System.out.println("==================================");
changewithoperateY(a, b);
System.out.println("==================================");
changewithStack(a,b);
}
}
输出结果
a =20
b =10
==================================
a =20
b =10
==================================
a =20
b =10