1

我在 HashMap.java 中看到了以下代码。

    h ^= k.hashCode();
    // This function ensures that hashCodes that differ only by
    // constant multiples at each bit position have a bounded
    // number of collisions (approximately 8 at default load factor).
    h ^= (h >>> 20) ^ (h >>> 12);
    return h ^ (h >>> 7) ^ (h >>> 4);

一些随机输入产生类似于加法的输出,但以下代码导致 0

   int p = 10;
    p ^= 10;
    System.out.println("_______ " + p);
4

5 回答 5

4

^=运算符对左边的变量和操作数进行异或运算,然后对结果的该变量进行赋值。

与自身异或,你得到零。这是一种将寄存器设置为零的有效方法,因为它不会移动任何内存。

于 2013-10-12T21:47:09.550 回答
1

^被称为XOR(Exclusive disjunction 或 Exclusive or),一个逻辑运算符,如下:

1 xor 1 = 0
1 xor 0 = 1
0 xor 1 = 1
0 xor 0 = 0

相当于 p^=10

p = p ^ 10; or,  p = p xor 10

您的p = 10操作很简单: , (10 ^ 10),这将导致0

于 2013-10-12T21:47:14.157 回答
1

^=是按位异或和赋值运算符。x ^= 2与 相同x = x ^ 2

于 2013-10-12T21:47:25.297 回答
1

^ 是逻辑 XOR(异或)的符号。

当放置在等号之前时,这意味着“将自己与给定的值进行异或,并将结果写回给自己”。a ^= value 与 a = a ^ value 相同。

如果与其他运算符一起使用,例如添加,它可能会更清楚:

例如:

int counter = 14;

 // Add 20 to counter (could also be written counter = counter + 20):
counter += 20;

// Counter is now 34
于 2013-10-12T21:47:31.460 回答
1

它是java中的复合赋值运算符:

x op= y相当于x = x op y(松散地说,见上面的链接)。

例如:

x += y;相当于x = x + y;

x -= y;相当于x = x - y;

等等 ...


作为参考,这是java 中所有此类运算符的完整列表:

+= -= *= /= &= |= ^= %= <<= >>= >>>=

于 2013-10-12T21:52:44.237 回答