Java 使用异或进行数组元素交换时的坑 返回0的原因

时间:2022-07-22
本文章向大家介绍Java 使用异或进行数组元素交换时的坑 返回0的原因,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在使用异或交换数组值的时候,可以使用异或,不用临时变量。

但是这个方法当i与j相等时,相当于始终对一个数自己进行异或,我们知道两个一样的数异或结果为0

假如i==j 则

a[i] = a[i] ^ a[j]; //结果为0 则此时a[i]=a[j]=0
a[j] = a[i] ^ a[j]; // = 0 ^ 0 = 0;
a[i] = a[i] ^ a[j]; // = 0

所以最后结果为0

添加一行判断问题解决。

private void swap(int[] a, int i, int j) {
    if (i == j){return;}//关键
    a[i] = a[i] ^ a[j];
    a[j] = a[i] ^ a[j];
    a[i] = a[i] ^ a[j];
    System.out.println("swap:" + a[j] + " <-> " + a[i]);
}