昨天面试的时候问到了这个,回答了异或的方式,后来自己又想了一下,总结这么几种

/**
 * 
 */
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