互换两个变量值。(至少3种方法,尝试不定义第3个变量)

废话不多说直接上代码

package com.admxj.swap;
/*
 * 2015年12月7日23:49:20
 * Java可避免C语言的溢出错误
 * 方法四可能会出现溢出情况
 */
public class Day01 {
	public static void main(String[] args) {
		int[] arr = {-2147483449,2147483420};
		System.out.println("源数据 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
		//方法一
		swap_1(arr);
		System.out.println("方法一 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
		//方法二
		swap_2(arr);
		System.out.println("方法二 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
		//方法三
		swap_3(arr);
		System.out.println("方法三 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
		//方法四
//		swap_4(arr);
//		System.out.println("方法四 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
		//方法5
		swap_5(arr);
		System.out.println("方法五 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
		swap_6(arr);
		System.out.println("方法六 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
		swap_7(arr);
		System.out.println("方法七 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
	}
	/*
	 * 求和, 再减去另一个数
	 */
	private static void swap_1(int[] arr){
		arr[0] = arr[0] + arr[1];
		arr[1] = arr[0] - arr[1];
		arr[0] = arr[0] - arr[1];
	}
	/*
	 * 求差, 与上面类似
	 */
	private static void swap_2(int[] arr){
		arr[0] = arr[0] - arr[1];
		arr[1] = arr[0] + arr[1];
		arr[0] = arr[1] - arr[0];
	}
	/*
	 * 异或运算(对一个数异或两次值不变)
	 */
	private static void swap_3(int[] arr){
		arr[0] = arr[0] ^ arr[1];
		arr[1] = arr[0] ^ arr[1];
		arr[0] = arr[1] ^ arr[0];
	}
	/*
	 * 
	 */
	private static void swap_4(int[] arr){
		arr[0] = arr[1]*arr[0];
		arr[1] = arr[0]/arr[1];
		arr[0] = arr[0]/arr[1];
	}
	/*
	 * 中间变量temp
	 */
	private static void swap_5(int[] arr){
		int temp = arr[0];
		arr[0] = arr[1];
		arr[1] = temp;
	}
	
	/*
	 * (参照齐星)
	 */
	private static void swap_6(int[] arr){
		arr[0] = arr[1] + (arr[1]=arr[0])*0;
	}
	private static void swap_7(int[] arr){
		arr[0] = (arr[1]+arr[0]) - (arr[1] = arr[0]);
	}
}