1

Apache下commons-lang工具包下BooleanUtils类的xor(true, true, true)结果为false,而System.out.println(true ^ true ^ true)的结果为true。为什么?

public class Test {
    public static void main(String[] args) {
        System.out.println(org.apache.commons.lang.BooleanUtils.xor(new boolean[]{true, true, true}));
        System.out.println(org.apache.commons.lang3.BooleanUtils.xor(new boolean[]{true, true, true}));
        System.out.println(true ^ true ^ true);
    }
}
/*
    result:
    false
    false
    true
*/
4

1 回答 1

1

您看到此行为的最可能原因是您使用的是旧版本的 commons-lang (< 3.2)。

较新版本的行为与 Java 相同(即,它从左到右一次计算一个 xor)。

然而,旧版本使用了一种不同的方法:只有当整个数组中只有一个真值时,它们才会返回真值。

这种行为被认为是不正确的(参见LANG-921)并且已经被修复。

于 2021-07-30T09:19:28.297 回答