IntValue & Integer.MAX_VALUE的作用
对最大值进行 与运算 的作用是为了去负号、取绝对值。
- 原因
最大值的在计算中表示为:符号位为0代表正数,数值全为1
如:int类型的最大值Integer.MAX_VALUE
01111111 11111111 11111111 11111111 4个字节,一个字节8位
与运算的规则是:
0&0=0; 0&1=0; 1&0=0; 1&1=1;
所以任意的int 数值对 Integer.MAX_VALUE进行&(与运算时)会得到其绝对值。 - 案例:
-
public class HashPartitioner<K, V> extends Partitioner<K, V> { /** Use {@link Object#hashCode()} to partition. */ public int getPartition(K key, V value, int numReduceTasks) { //对key.hashCode()取绝对值,防止负数的情况 return (key.hashCode() & Integer.MAX_VALUE) % numReduceTasks; } }