您可以在http://clojure.org/special_forms#if找到解释。
阅读整段内容很好,但这里是摘录的关键部分,重点补充说:
[...] Clojure 中的所有 [...] 条件都基于相同的逻辑,即nil和false构成逻辑错误,而其他所有内容都构成逻辑真,并且这些含义始终适用。[...]请注意,如果不测试 java.lang.Boolean 的任意值,则仅测试奇异值 false(Java 的 Boolean.FALSE),因此如果您要创建自己的盒装布尔值,请确保使用 Boolean/valueOf 和不是布尔构造函数。
比较
System.out.println(Boolean.valueOf(false) ? true : false); // false
System.out.println(new Boolean(false) ? true : false); // false
和
user=> (if (Boolean/valueOf false) true false)
false
user=> (if (Boolean. false) true false)
true
因此,(Boolean. false)既不是nil也不是false,就像(Object.)既不是nil也不是false。正如@Chiron 指出的那样,无论如何使用它都是不好的做法。
至于(= false (Boolean. false))是否属实,我认为@looby 的解释是正确的:由于=依赖于 Java 的equals方法,因此 Clojure 中条件的特殊语义不适用,布尔相等将与 Java 中一样。