为什么写这篇文章? 只是单纯的介绍一种数值交换的方式。想起之前大学的时候,室友问了我一个问题,如何不借助临时变量将两个整型数据进行数值交换。我当时花了好一会儿时间也没有思路。我对自己还是比较理解的,一个问题一旦花了较长时间都没有思路,那么这个问题在没有提示的情况下我很可能是想不出来的,所以我直接问他怎么做的。 原来思路如此简单,就是将两个数值的和赋值给a,然后将两个数值的差赋值给b,最后将两个数值的差赋值给a。 公式化就是a=a+b;b=a-b;a=a-b。而且经过测试就算相加的和越界了也不影响数值交换的结果,虽然感觉这个东西没啥大用,但是感觉这个思路很清新,所以一直都忘不了这个骚操作。测试及结果 测试代码
package per.test; public class SimTest { public static void main(String[] args) { System.out.println("Integer.MAX_VALUE"); int a = Integer.MAX_VALUE - 10; int b = Integer.MAX_VALUE - 100; System.out.println("before"); System.out.println("a=" + a); System.out.println("b=" + b); System.out.println("a+b=" + (a + b)); a = a + b; b = a - b; a = a - b; System.out.println("after"); System.out.println("a=" + a); System.out.println("b=" + b); System.out.println("=====这是华丽的分割线====="); System.out.println("Integer.MIN_VALUE"); a = Integer.MIN_VALUE + 10; b = Integer.MIN_VALUE + 100; System.out.println("before"); System.out.println("a=" + a); System.out.println("b=" + b); System.out.println("a+b=" + (a + b)); a = a + b; b = a - b; a = a - b; System.out.println("after"); System.out.println("a=" + a); System.out.println("b=" + b); } }测试结果
Integer.MAX_VALUE before a=2147483637 b=2147483547 a+b=-112 after a=2147483547 b=2147483637 =====这是华丽的分割线===== Integer.MIN_VALUE before a=-2147483638 b=-2147483548 a+b=110 after a=-2147483548 b=-2147483638
