【问题标题】:difference between null != something and something != nullnull != something 和 something != null 之间的区别
【发布时间】:2013-01-12 18:36:33
【问题描述】:

null != somethingsomething != null 在 Java 中是否有区别。如果有区别,那么我应该使用哪一个?为什么?

【问题讨论】:

标签: java null-check


【解决方案1】:

null != somethingsomething != null 之间没有区别。您一定在考虑person.getName().equals("john")"john".equals(person.getName()) 的区别:如果getName() 返回null,第一个会抛出NullPointerException,而第二个不会。但这不适用于您的问题示例。

【讨论】:

    【解决方案2】:

    它可能来自所谓的 joda 条件,您在其中编写 "bla" == myVariable 而不是 myVariable == "bla",因为它可能碰巧意外编写 myVariable = "bla",它在某些语言中返回“bla”,但也将“bla”分配给我的变量

    【讨论】:

    • 谢谢!我的一个同事向我解释过,我不记得她说了什么!
    【解决方案3】:

    我只想指出,这样做的“尤达条件”基本原理(在 C 和 C++ 等语言中)不适用于这种 (Java) 案例。

    1. Java 不允许将通用表达式用作语句,所以两者都

       something == null;
      

       null == something;
      

      会是编译错误。

    2. something == nullsomething = null的类型不同; boolean 和一些引用类型。在这种情况下,这意味着两者:

       if (something = null) {
           ...
       }
      

       if (null = something) {
           ...
       }
      

      会是编译错误。

    事实上,我想不出null == something 会是编译错误而something == null 不会是现实 的例子。因此,它在防错方面没有取得任何成果。

    【讨论】:

    • 在 C# 中也是如此。在布尔条件中错误地使用“=”而不是“==”会导致编译错误。尤达条件在这里什么都不做。
    【解决方案4】:

    没有区别,但有些人使用它是为了便于代码的可读性。

    【讨论】:

      【解决方案5】:

      从性能上看不会有区别,两边的算子都是以任何方式执行的。但是对于更易读的代码,第二个似乎更易读

        obj.getSomething().getAnotherThing().doSomething() != null
      
        null != obj.getSomething().getAnotherThing().doSomething()
      

      但如果你只是比较一个变量或参数,这更具可读性

        something != null
      

      当然,这取决于读者的感觉。

      【讨论】:

        【解决方案6】:

        在java中,如果我们比较任何一个,总是我们必须将变量放在左侧,值放在右侧......

        【讨论】:

        • 我认为这是惯例。
        【解决方案7】:

        它们都是一样的,没有区别。

        【讨论】:

          猜你喜欢
          • 2018-12-31
          • 1970-01-01
          • 2013-06-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-31
          相关资源
          最近更新 更多