package com.zby.bubble;/** *三种方法交换两个整数的值 * * @author zby * */public class Exchange { public static void main(String[] args) { splitLine(); exchange1(Integer.MAX_VALUE, Integer.MAX_VALUE - 1); exchange1(99, 100); exchange1(Integer.MIN_VALUE, Integer.MIN_VALUE + 1); splitLine(); exchange2(Integer.MAX_VALUE, Integer.MAX_VALUE - 1); exchange2(99, 100); exchange2(Integer.MIN_VALUE, Integer.MIN_VALUE + 1); splitLine(); exchange3(Integer.MAX_VALUE, Integer.MAX_VALUE - 1); exchange3(99, 100); exchange3(Integer.MIN_VALUE, Integer.MIN_VALUE + 1); splitLine(); } /** * 使用一个临时变量交换,优点:对于其他类型同样适用。 * * @param a * @param b */ public static void exchange1(int a, int b) { System.out.println("使用临时变量法进行交换,引入第三方变量"); System.out.println("交换之前:a=" + a + ",b=" + b); int temp = a; a = b; b = temp; System.out.println("交换之后:a=" + a + ",b=" + b); } /** * 重点:一个整数异或另一个整数两次,得到的还是这个原来的数。优点:不引入临时变量;缺点:只能对整数使用。 * * @param a * @param b */ public static void exchange2(int a, int b) { System.out.println("使用异或法进行交换,不引入第三方变量"); System.out.println("交换之前:a=" + a + ",b=" + b); a ^= b; b ^= a; a ^= b; System.out.println("交换之后:a=" + a + ",b=" + b); } /** * 注意:加减法交换可能导致溢出,但是,没影响!!!!!溢出去又溢回来,结果是对的,是可以放心用的!!!!!之前进入误区以为溢出会有什么问题,然而并没有。 * * @param a * @param b */ public static void exchange3(int a, int b) { System.out.println("使用加减法进行交换,不引入第三方变量"); System.out.println("交换之前:a=" + a + ",b=" + b); a += b; b = a - b; a -= b; System.out.println("交换之后:a=" + a + ",b=" + b); } public static void splitLine() { System.out.println("----------华丽丽的分割线----------"); }}
----------华丽丽的分割线----------使用临时变量法进行交换,引入第三方变量交换之前:a=2147483647,b=2147483646交换之后:a=2147483646,b=2147483647使用临时变量法进行交换,引入第三方变量交换之前:a=99,b=100交换之后:a=100,b=99使用临时变量法进行交换,引入第三方变量交换之前:a=-2147483648,b=-2147483647交换之后:a=-2147483647,b=-2147483648----------华丽丽的分割线----------使用异或法进行交换,不引入第三方变量交换之前:a=2147483647,b=2147483646交换之后:a=2147483646,b=2147483647使用异或法进行交换,不引入第三方变量交换之前:a=99,b=100交换之后:a=100,b=99使用异或法进行交换,不引入第三方变量交换之前:a=-2147483648,b=-2147483647交换之后:a=-2147483647,b=-2147483648----------华丽丽的分割线----------使用加减法进行交换,不引入第三方变量交换之前:a=2147483647,b=2147483646交换之后:a=2147483646,b=2147483647使用加减法进行交换,不引入第三方变量交换之前:a=99,b=100交换之后:a=100,b=99使用加减法进行交换,不引入第三方变量交换之前:a=-2147483648,b=-2147483647交换之后:a=-2147483647,b=-2147483648----------华丽丽的分割线----------