用Java链接分配语句

时间:2018-11-17 05:19:59

标签: java operators variable-assignment swap

这是XOR swap algorithm的一个me脚的实现:

char a = 'a', b = 'b';
a ^= b;
b ^= a;
a ^= b;
System.out.println(a + " " + b);

按预期,输出为b a。据我所知,Java中的赋值运算符返回赋值,这意味着以下代码应该产生相同的结果:

a ^= (b ^= (a ^= b));

但是,这只打印a。另外,令我惊讶的是,另外两个变体都输出b a

  • 变体1(效果很好):

    a ^= b;
    a ^= (b ^= a);
    
  • 变体2(也可以正常工作):

    b ^= (a ^= b);
    a ^= b;
    

我真的很困惑。为什么我可以链接两个任务,但不能链接三个?

编辑:

作为参考,以下C代码输出b a,这就是我提出这个问题的方式。

#include <stdio.h>

int main(void) {
    char a = 'a', b = 'b';
    a ^= (b ^= (a ^= b));
    printf("%c %c\n", a, b);
}

0 个答案:

没有答案