将null与对象而不是具有null的对象进行比较有什么问题

时间:2012-04-20 10:42:50

标签: c# java compiler-construction null

我发现我可以将null与此类Object进行比较,

if(null != Object)

而不是将Objectnull进行比较,例如

Object != null

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

这合法吗?如果没有,那么编译器为什么接受它呢?

6 个答案:

答案 0 :(得分:14)

两者都是等价的,但null != object是一种古老的做法,它可以有效地写if (object = null)并且意外 将null赋给对象。这是一个阻止这次事故发生的警卫。

答案 1 :(得分:6)

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

我听过null != object的最好的论点是避免表达不好。例如在if (var == 1)

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

答案 2 :(得分:6)

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

答案 3 :(得分:2)

这只是一个可读性的问题。如果你可以大声读出你的代码,那就更容易理解了。第二个版本就像Yoda-talk ..“null不是对象..”比较“对象不为空”..

这同样适用于为变量和方法提供良好的名称。

用于编写可读代码的良好参考站点:http://www.cleancoders.com/

答案 4 :(得分:0)

它是一样的。这几乎就像说1 != 2。这是否意味着2 != 1

答案 5 :(得分:0)

!=运算符的行为与对等运算符==的测试相同。

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

如果对象是变量(或常量),则(null != Object)同样有效(尽管可读性稍差)。