Here’s an old trick from C, which carries over to Java. If you have two intsa and bwhose values you want to swap, the obvious way to do so is with a third, temporary variable:

`int c = a;a = b;b = c;`

It can be done without a temporary variable, however, using Java’s bitwise xor operator ^:

`a = a^b;b = a^b;a = a^b;`

The operator ^ produces a new int, each of whose bits is the result of xor-ing the two corresponding bits from the operands (1 if the bits are different, 0 otherwise). To see why the trick works, consider the single-bit case of a=1 and b=0.

`a = a^b = 1 xor 0 = 1b = a^b = 1 xor 0 = 1a = a^b = 1 xor 1 = 0`

Even though you initially overwrite the value of a, no information is lost; its encoding simply changes. In the case of larger (multi-bit) numbers, each pair of bits will be swapped in the same way, and so the entire int values are swapped.

Finally, the swapping code can be made even more succinct:

`a ^= b ^= a ^= b;`