Java 两个变量交换值
上课时候正好讲到交换变量,学生说我借助第三方变量来交换好low,哈哈。好吧...
我来总结下我知道的,java的一些交换变量的方式。来人啊,代码伺候:
package test; public class Test { public static void main(String[] args) { int a, b; a = 10; b = 12; System.out.println(a + " " + b); /* * 借助第三方变量 这种算法易于理解,特别适合帮助初学者了解计算机程序的特点,是赋值语句的经典应用。 * 在实际软件开发当中,此算法简单明了,不会产生歧义,便于程序员之间的交流。 一般情况下碰到交换变量值的问题,都应采用此算法(标准算法)。 */ int temp = a; a = b; b = temp; System.out.println(a + " " + b); /* * 算术算法 它的原理是:把a、b看做数轴上的点,围绕两点间的距离来进行计算。 具体过程: * 第一句“a=b-a”求出ab两点的距离,并且将其保存在a中; * 第二句“b=b-a”求出a到原点的距离(b到原点的距离与ab两点距离之差),并且将其保存在b中; * 第三句“a=b+a”求出b到原点的距离(a到原点距离与ab两点距离之和),并且将其保存在a中。完成交换。 * 此算法与标准算法相比,多了三个计算的过程,但是没有借助临时变量。(算术算法) */ a = b - a; b = b - a; a = b + a; System.out.println(a + " " + b); /* * 异或 相同为1 不同为0 此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。 * 这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。 * 即:a^b^b=a。将a=a^b代入b=a^b则得b=a^b^b=a;同理可以得到a=b^a^a=b;轻松完成交换。 */ a = a ^ b;// 1010 ^ 1100 1001 b = a ^ b;// 1001 ^ 1100 1010 a = a ^ b;// 1001 ^ 1010 1100 System.out.println(a + " " + b); } }
个人觉得异或好玩点。