java puzzler - Swap Meat

来源:互联网 发布:java等级划分英语缩写 编辑:程序博客网 时间:2024/05/18 17:28

x ^= y ^= x ^= y 试图实现两个变量交换值,避开中间变量。

 

 

 

x ^= y ^= x ^= y在C和C++中大多数情况下能够实现值交换,但是也不能保证必定成功。

可以肯定的是这个表达式在JAVA中不能实现值交换:

JAVA 中x ^= y ^= x ^= y 的实际行为:

int tmp1 = x;     // First appearance of x in the expression

int tmp2 = y;     // First appearance of y

int tmp3 = x ^ y; // Compute x ^ y

x = tmp3;         // Last assignment: Store x ^ y in x

y = tmp2 ^ tmp3; // 2nd assignment: Store original x value in y

x = tmp1 ^ y;     // First assignment: Store 0 in x

可以使用下面方式实现:

y = (x ^= (y ^= x)) ^ y;

但是不鼓励使用这种类型的表达式,因为可能会使用到更多的中间变量,降低运行速率,与节约时间和空间的初衷背道而驰。

原创粉丝点击