I recently read about the XOR way to do swap():
void swap1(int[] arr, int a, int b) {
arr[a] = arr[a] ^ arr[b];
arr[b] = arr[a] ^ arr[b];
arr[a] = arr[a] ^ arr[b];
}
Making it shorter, we have:
void swap2(int[] arr, int a, int b) {
arr[a] ^= arr[b] ^ (arr[b] = arr[a]);
}
And:
void swap3(int arr[], int a, int b) {
arr[a] ^= arr[b] ^= arr[a] ^= arr[b];
}
However, swap3()
only works in C++ and doesn't work on Java after migrated. What difference between C++ and Java makes the same code provide different results when compiled in different language?