为什么写这篇文章?
只是单纯的介绍一种数值交换的方式。想起之前大学的时候,室友问了我一个问题,如何不借助临时变量将两个整型数据进行数值交换。我当时花了好一会儿时间也没有思路。我对自己还是比较理解的,一个问题一旦花了较长时间都没有思路,那么这个问题在没有提示的情况下我很可能是想不出来的,所以我直接问他怎么做的。
原来思路如此简单,就是将两个数值的和赋值给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