可能重复:
Why does one often see “null != variable” instead of “variable != null” in C#?
这更像是一个好奇心问题,声明之间是否有任何性能差异。
if(value == null)
和
if(null == value)
是否引人注目,我使用c#,PHP& javascript经常和我记得有人说如果(null == value)更快,但它真的吗?
我将很快开始开发一个应用程序,该应用程序将解析太字节区域中的大量数据,因此即使性能增益在毫秒范围内,也会产生影响。有人有什么想法吗?
答案 0 :(得分:20)
我怀疑无论哪种方式都有可衡量的性能优势。我敢打赌告诉你的人没有任何硬数据。
据我所知,这是一个历史文物,一种来自C和C ++的技术来防范这个错误:
if (c = null) {
}
如果您反转参数,编译器将捕获此信息,因为您无法将某些内容赋值为null。
答案 1 :(得分:5)
预计完全没有性能差异。
使用(丑陋)形式(if null == value)
的唯一原因是避免C / C ++特定的拼写错误:
if (value = null) // compiles but _assigns_ null to value and always returns false
... // never executed
答案 2 :(得分:5)
我分析了超过1亿次迭代。
if(value == null)
- 6.85175704956秒(每个68.5纳秒)
if(null == value)
- 6.75543808937秒(每个67.5纳秒)
如果1纳秒足以获得收益,那么由你决定。
答案 3 :(得分:4)
我认为期望没有区别是公平的:它是如此简单的情况,如果存在差异,编译器将确保生成最快的版本。
答案 4 :(得分:1)
这样的优化最多可以获得一个时钟周期(虽然我不知道为什么)。但最有可能的是,如果它更好,那么编译器会为你优化它。
首先放置任何文字(例如null
)的原因是,如果您执行=
而不是==
,则无法意外分配值。我个人确实发现它的可读性较差。
答案 5 :(得分:1)
是的我也认为没有区别,但我个人更喜欢if(value == null)
答案 6 :(得分:0)
我不确定它是否更快或者某些语言允许您在if语句中进行分配而不会发出警告,如果您这样做:
if (value = null)
错误地你可以擦除你的变量,而反过来不会在执行路径上进一步引起奇怪的问题。