Why are XOR often used in java hashCode() but another bitwise operators are used rarely?

Andrei N picture Andrei N · Feb 25, 2010 · Viewed 12k times · Source

I often see code like

int hashCode(){
  return a^b;
}

Why XOR?

Answer

Nils Pipenbrinck picture Nils Pipenbrinck · Feb 25, 2010

Of all bit-operations XOR has the best bit shuffling properties.

This truth-table explains why:

A B AND
0 0  0
0 1  0
1 0  0
1 1  1

A B OR
0 0  0
0 1  1
1 0  1
1 1  1

A B XOR
0 0  0
0 1  1
1 0  1
1 1  0

As you can see for AND and OR do a poor job at mixing bits.

OR will on average produce 3/4 one-bits. AND on the other hand will produce on average 3/4 null-bits. Only XOR has an even one-bit vs. null-bit distribution. That makes it so valuable for hash-code generation.

Remember that for a hash-code you want to use as much information of the key as possible and get a good distribution of hash-values. If you use AND or OR you'll get numbers that are biased towards either numbers with lots of zeros or numbers with lots of ones.