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),此后已得到修复。
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),此后已得到修复。