Objects.equals()
K-ballo 的答案没有任何问题。 如果您喜欢单个简单条件,并且像我一样不喜欢 Yoda 条件,那么自从 Java 1.7 以来,答案就是:
if (Objects.equals(bool, true)) {
或者如果您同时更喜欢非常明确
if (Objects.equals(bool, Boolean.TRUE)) {
或者更好的方法:避免这个问题
不建议使用Boolean
对象,从而允许Boolean
引用在第一次使用时为null
。像你看到的那样,NullPointerException
的风险太大了。如果需要一种三态逻辑,最好定义一个有三个值的枚举。例如:
enum MyTristateBoolean { FALSE, DONT_KNOW, TRUE }
现在我们根本不需要null
了。中间的常量可能应该被命名为UNKNOWN
、UNDEFINED
、NOT_EXISTING
或者其他一些与你的具体情况相关的名称。如果合适的话,甚至可以将其命名为NULL
。现在,根据个人喜好,你的比较会变成以下两种之一。
if (myBool.equals(MyTristateBoolean.TRUE)) {
if (myBool == MyTristateBoolean.TRUE) {
后者可行,因为编译器保证每个枚举常量只有一个实例。正如大多数人所知,==
不能用于比较非枚举类型的对象是否相等。
if (bool == Boolean.TRUE)
在不生成异常的情况下评估为 false。我不确定这是否是我刚刚发现的意图。 - simon.wattsbool
为null
或者Boolean
被显式构造(而不是作为对Boolean.TRUE
的引用),那么bool == true
的结论是错误的。因此不建议使用此方法,建议使用if (Boolean.TRUE.equals(bool))
来实现预期的结果,包括安全地处理null
值。 - StaxMan