Java 不使用中间变量交换两个数

public class ChangeStation {

	public static void main(String[] args) {
		Num num = new Num(3, 4);
		swapOne(num);
//		swapTwo(num);
		System.out.println(num);
	}

	/**
	 * @description: 通过某种运算(二元运算)将a和b两个数变成一个数, 
	 * 				并保存在其中一个变量中, 
	 * 				然后再通过同样的运算符将a或b中和掉,
	 *              这样实际上是利用了a或 b本身作为了中间变量。
	 * @param num
	 * @return void
	 * @throws @author
	 *             beyond
	 * @data:2016年10月28日下午3:09:31
	 */
	public static void swapOne(Num num) {
		num.a = num.a + num.b;
		num.b = num.a - num.b;
		num.a = num.a - num.b;
	}

	
	/**
	 * @description: 异或运算符: 任何数与0异或后仍然为它本身,两个相同的数异或后为0
	 * @param num   
	 * @return void   
	 * @throws
	 * @author beyond
	 * @data:2016年10月28日下午3:11:16
	 */
	public static void swapTwo(Num num) {
		num.a = num.a ^ num.b;
		num.b = num.a ^ num.b;
		num.a = num.a ^ num.b;
	}

	
	/**
	 * @description: 交换的类
	 * @author beyond
	 * @data:2016年10月28日下午3:11:16
	 */
	static class Num {
		private int a;
		private int b;

		public Num(int a, int b) {
			super();
			this.a = a;
			this.b = b;
		}

		@Override
		public String toString() {
			return "Num [a=" + a + ", b=" + b + "]";
		}

	}
}

 

猜你喜欢

转载自bugyun.iteye.com/blog/2333980