昨天面试的时候问到了这个,回答了异或的方式,后来自己又想了一下,总结这么几种
/** * */ 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