Apache下commons-lang toolkit下的BooleanUtilsclass的xor(true, true, true)的结果为false,为什么?

The result of xor(true, true, true) of the BooleanUtils class under the commons-lang toolkit under Apache is false, why?

BooleanUtilsclass下的xor(true,true,true)的结果[=14= Apache下的]commons-lang工具包是false,但是System.out.println(true ^ true ^ true)[=20=的结果] 是 。为什么?

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
*/

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

较新版本的行为 the same as Java(即它从左到右一次计算一个异或)。

旧版本使用 different approach 但是:它们 return 只有在整个数组中 正好有一个 真值时才为真。

此行为被认为是不正确的(参见 LANG-921),此后已得到修复。