if(boolean == false)vs。​​if(!boolean)

时间:2012-08-06 16:04:00

标签: java boolean boolean-logic boolean-expression

  

可能重复:
  Is it bad to explicitly compare against boolean constants e.g. if (b == false) in Java?

this NotePadProvider sample code中,我注意到作者选择了表格:

    if (values.containsKey(NoteColumns.CREATED_DATE) == false) {
        values.put(NoteColumns.CREATED_DATE, now);
    }

在:

    if (!values.containsKey(NoteColumns.CREATED_DATE)) {
        values.put(NoteColumns.CREATED_DATE, now);
    }

第一种形式在更合乎逻辑的形式上是否有任何优势?

7 个答案:

答案 0 :(得分:53)

除了“可读性”,没有。它们在功能上是等价的。

(“可读性”在引号中,因为我讨厌== false并且发现!更具可读性。但其他人则不然。)

答案 1 :(得分:6)

这是一种风格选择。它至少不会影响代码的性能,只会让读者更加冗长。

答案 2 :(得分:6)

主要是可读性。在阅读其他代码时,更直观地将其读作 NOT CONTAINS KEY !values.containsKey(NoteColumns.CREATED_DATE),而不是阅读 CONTAINS KEY IS FALSE (values.containsKey(NoteColumns.CREATED_DATE) == false)

答案 3 :(得分:5)

- 这里更多地关注coding style而不是功能 ....

- 第一个选项非常清晰,但第二个选项非常优雅 ...没有冒犯,只是我的观点..

答案 4 :(得分:3)

没有。我没有看到任何优势。第二个更为明确。

btw:在JDK源的每个角落都可以找到第二种风格。

答案 5 :(得分:2)

注意:使用ConcurrentMap,您可以使用更高效的

values.putIfAbsent(NoteColumns.CREATED_DATE, now);

我更喜欢较不详细的解决方案,并避免使用IsTrue或IsFalse等方法。

答案 6 :(得分:1)

第一种形式与API一起使用,返回Boolean并与Boolean.FALSE进行比较时,永远不会抛出NullPointerException

第二种形式与java.util.Map界面一起使用时,也永远不会抛出NullPointerException,因为它会返回boolean而不是Boolean

如果你不关心一致的编码习语,那么你可以选择你喜欢的那个,在这个具体的情况下它真的没关系。如果您关心一致的编码,那么在您检查Boolean可能是NULL时,请考虑您要执行的操作。