【问题标题】:What is wrong in comparing a null with an object rather than an object with a null将 null 与对象而不是与 null 的对象进行比较有什么问题
【发布时间】:2012-04-20 10:42:50
【问题描述】:

我刚刚发现我可以像这样将nullObject 进行比较,

if(null != Object)

而不是将Objectnull比较,喜欢

Object != null

如果使用前一种方法会出现什么问题?

这合法吗?如果不是,那么为什么编译器会接受它?

【问题讨论】:

  • 为什么你认为这不起作用?
  • 没什么问题,只是口味问题。有些人喜欢这个,有些人喜欢 object != null。我个人觉得 Object != null 更容易阅读。
  • if(null != object), null 作为一个对象与另一个对象进行比较.. 并且比较引用是 null insted 的对象
  • @mirroredAbstraction No. Null 作为 reference 与另一个引用进行比较。 .. 之后的部分没有意义。

标签: c# java compiler-construction null


【解决方案1】:

两者是等价的,但 null != object 是一种古老的语言实践,在这种语言中,if (object = null) 是有效的,但不小心 将 null 分配给对象。阻止这起事故的发生是一个守卫。

【讨论】:

  • 在 Java 中,第二个无法编译。
【解决方案2】:

它有一个问题 - 可读性。如果你想写一个干净的代码,你应该关心它将来的阅读方式。它需要很明显,它做什么以及为什么它做某件事。如果您将“对象”放在评估的右侧,那么您真正在做什么就变得不那么明显了。至少在我看来……

【讨论】:

    【解决方案3】:

    大多数人说Object != null,因为这是他们习惯的,所以更容易阅读。

    我听到的关于null != object 的最佳论点是避免不良表达。例如在if (var == 1)中找到一个错字

    if (var = 1) // this is valid C
    if (1 = var) // this is not valid C
    

    【讨论】:

      【解决方案4】:

      这只是可读性的问题。如果你能大声朗读你的代码并且它是有意义的,那么它更容易理解。第二个版本就像 Yoda-talk..“null is not the object..”对比“The object is not null”..

      这同样适用于为变量和方法命名。

      编写可读代码的好参考网站:http://www.cleancoders.com/

      【讨论】:

      • 你的意思是 Yoda-talk,就像在 Yoda Syntax 中一样?
      • 对.. jamiethompson.co.uk/web/2010/05/20/… 只是它解释为什么,这是一个好主意......也许如果你的德语......
      【解决方案5】:

      是一样的。这几乎就像说如果1 != 2。这是否暗示2 != 1

      【讨论】:

        【解决方案6】:

        != 运算符的行为与相等运算符 == 的测试一样。

        忽略表达式中的任何副作用,那么 (expr1 != expr2) 和 (expr2 != expr1) 完全相同。

        如果 Object 是一个变量(或常量),那么 (null != Object) 也同样有效(尽管可读性稍差)。

        【讨论】:

          猜你喜欢
          • 2022-09-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-21
          • 1970-01-01
          相关资源
          最近更新 更多