将null与对象而不是具有null的对象进行比较有什么问题
我刚刚发现我可以将null
与这样的Object
进行比较,
if(null != Object)
而不是将Object
与null
进行比较,例如
Object != null
如果使用前一种方法可能会出错?
这合法吗? 如果没有,那么为什么编译器接受它?
这有一点是错的 – 可读性。 如果你想编写一个干净的代码,你应该关心它将来的阅读方式。 它需要是显而易见的,它做什么以及为什么它做某件事。 如果将“对象”放在评估的右侧,那么你真正在做什么就变得不那么明显了。 至少在我看来……
两者都是等价的,但是null != object
是一种古老的做法,它是有效的写入if (object = null)
并且意外地将null赋给对象。 这是一个阻止这次事故发生的警卫。
大多数人都说Object != null
因为它是他们习惯的,所以它更容易阅读。
我听过的最好的参数是null != object
是为了避免错误的表达。 例如,在if (var == 1)
拾取拼写错误
if (var = 1) // this is valid C if (1 = var) // this is not valid C
这只是一个可读性的问题。 如果你可以大声读出你的代码,那么它就更容易理解。 第二个版本就像Yoda-talk ..“null不是对象..”比较“对象不为空”。
这同样适用于为变量和方法提供良好的名称。
用于编写可读代码的良好参考站点: http : //www.cleancoders.com/
这是相同的。 这几乎就像说1 != 2
。 这意味着2 != 1
?
!=
运算符的行为与对等于运算符==
的测试相同。
忽略表达式中的任何副作用( expr1 != expr2
)和( expr2 != expr1
)完全相同。
如果Object是一个变量(或常量),则( null != Object
)同样有效(尽管可读性稍差)。