if(value == null) vs if(null == value)


if(value == null) vs if(null == value)

可能重复:
为什么人们经常看到;null!=变量”而不是“变量!=null";在C#中?

这更多是一个令人好奇的问题,这两种说法之间是否存在性能差异。

 if(value == null)

 if(null == value)

值得注意的是,我使用了c#、PHP&javascript经常出现,我记得有人说if(null==value(更快,但真的吗?

我很快将开始开发一个应用程序,该应用程序将解析万亿字节范围内的大量数据,因此即使性能提升在毫秒范围内,也可能产生影响。有人有什么想法吗?

无论哪种方式,我都怀疑是否存在可衡量的性能优势。我敢打赌,告诉你这件事的人没有任何硬数据。

据我所知,这是一个历史文物,是C和C++用来防止这个错误的技术:

if (c = null) {
}

如果你反转参数,编译器会发现这个问题,因为你不能给null赋值。

我介绍了这两个超过1亿次的迭代。

if(value==null(
--6.85175704956秒(每个68.5纳秒(
if(null==value(
--6.75543808937秒(每个67.5纳秒(

因此,1纳秒是否足够增益取决于你。

绝对没有预期的性能差异。

使用(丑陋的(形式(if null == value)的唯一原因是为了避免C/C++特定的打字错误:

if (value = null)  // compiles but _assigns_ null to value and always returns false
    ...  // never executed

我认为可以公平地预期不会有任何差异:这是一个非常简单的情况,如果有差异,编译器无论如何都会确保生成最快的版本。

是的,我也认为不会有什么不同,但我个人更喜欢if(value == null)

这样的优化最多只会给你一个时钟周期(我不知道为什么(。但最有可能的是,如果它更好,那么编译器会为您优化它。

将任何文字(如null(放在第一位的原因是,如果使用=而不是==,则不会意外地分配值。不过,我个人确实觉得它可读性较差。

我不确定它是否更快,但有些语言允许您在if语句中赋值,而不会发出警告,所以如果您这样做:

if (value = null)错误地可以擦除变量,而另一种方法不会在执行路径上进一步引发奇怪的问题。