将变量与null
进行比较和将null
与变量进行比较有什么区别吗?
例如,哪种比较更好(a != null)
还是(null != a)
?
我在某个地方读到第二种方法更快,但没有找到原因。
if(x = 3)
代替if( x == 3)
有些人认为最好先写常量,这样如果你写了=
而不是==
,编译器就会报错。因此一些资源建议首先写常量。
if(3 == x)
有些人不知道为什么需要这样做,他们将这个想法推广到了在构造和语言中根本没有意义的地方。在我看来,在原始的C语境中也没有多大意义,但这是个人口味的问题。
null == var
比较慢一条指令,因为 null 必须被推入堆栈。虽然不多,但也不完全相同。 - Bohemianif (a != null)
更易读 - 在大多数情况下,可读性比性能更重要。null != a
更易读,可能是习惯问题 :-) - aishwarya在处理字符串时,您可能只想在变量前使用文字。
if("abcd".equals(name))
不会抛出 NPE
,而 if(name.equals("abcd"))
如果 name
为 null
,则会抛出异常。
通常这样做是为了防止意外赋值而不是比较:
( a = null ) //will not give error
( null = a ) //will give error
我相信效率并不是原因,即使是,优化器也会以二进制形式呈现相同的代码。
Boolean a = true; if (a = null) {}
。没有编译错误,但在运行时会出现NPE。 - Thiloif(variable = null)
的错误。 - adarshr不,完全没有任何区别。
现在不是Java,以前可能是C语言,你可能会无意中忘记感叹号,但代码仍然可以编译通过。基本上,a = null
将被视为将null赋值给a
的表达式,并始终评估为true(因为赋值成功)。
今天的编译器更加强大。虽然老习惯难改,我仍然写null != a
:-)
a
并且总是评估为true(因为赋值成功)的表达式”的评论是不正确的。它会评估为null的值(所以如果null为false,它可以是false)。 - Mr Lister