Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java (a!=null)或(null!=a)_Java_Variables_Null - Fatal编程技术网

Java (a!=null)或(null!=a)

Java (a!=null)或(null!=a),java,variables,null,Java,Variables,Null,将变量与null进行比较或将null与变量进行比较有什么区别吗 例如,哪个比较更好(a!=null)还是(null!=a)? 我在某个地方读到第二个更快,但没有找到原因。不,没有什么区别。不,没有一个更快。那是个彻头彻尾的谎言。使用第二个版本没有任何好处。只会让可读性更差 这一切都来自C语言,在C语言中,您可能会错误地编写 if(x = 3) 而不是 if( x == 3) 有些人认为最好先写常量,在这种情况下,如果你写的是=而不是=,你会得到一个编译器错误。因此,一些消息来源建议写作 i

将变量与
null
进行比较或将
null
与变量进行比较有什么区别吗

例如,哪个比较更好
(a!=null)
还是
(null!=a)

我在某个地方读到第二个更快,但没有找到原因。

不,没有什么区别。

不,没有一个更快。那是个彻头彻尾的谎言。使用第二个版本没有任何好处。只会让可读性更差

这一切都来自C语言,在C语言中,您可能会错误地编写

if(x = 3) 
而不是

if( x == 3)
有些人认为最好先写常量,在这种情况下,如果你写的是
=
而不是
=
,你会得到一个编译器错误。因此,一些消息来源建议写作

if(3 == x)

有些人不知道为什么这是必要的,他们继续并将这一想法推广到结构和语言中,而这是毫无意义的。在我看来,它在最初的C环境中也没有多大意义,但这是个人品味的问题。

即使速度有差异,我也认为它在99.99%的应用程序中完全无关紧要。事实上,我不希望有任何速度差。我个人认为
如果(a!=null)
更具可读性——在大多数情况下,可读性比性能更重要。

这样做通常是为了防止意外赋值而不是比较:

( a = null ) //will not give error

( null = a ) //will give error

我相当肯定效率不是一个原因,如果是的话,优化器将以二进制形式呈现相同的代码。

不太可能,至少现在不是java。在以前,可能是C,您可能会意外地忘记感叹号,代码会编译得很好。基本上,
a=null
将被视为将null赋值给
a
并始终计算为true的表达式(因为赋值成功)


今天的编译器要健壮得多。虽然,旧习惯很难改掉,我仍然写
null!=a
:-)

在对字符串进行操作时,您可能只希望在变量前面使用一个文本


if(“abcd.equals(name))
不会抛出一个
NPE
,其中as
if(name.equals(“abcd”)
会抛出一个
name
如果将
null

我们不能在Java中犯这个错误,但是C/C++啊!我的意思是,由于java编译器的原因,您的两条语句都会出错
if(a=null)
在某些C/C++编译器中很好。@H3S:如果我们足够努力,在Java中也会犯这个错误:
Boolean a=true;如果(a=null){}
。没有编译错误,但在运行时会出现NPE。@Thilo:噢,对不起!我忘记了布尔值type@H3S你说得对-不包括Thilo的例子,这是一个很好的例子-我没有想到。Yoda条件FTW:)(链接仅可供10k用户访问)我发现
null!=A/COD>更可读,习惯的问题:——AsiWaYa:从C或C++发展的习惯?用这种方式进行比较可能是有道理的(尽管现代编译器会选择意外赋值,IIRC),但我相信大多数没有明确好处背景的开发人员都会发现“变量优先”形式更具可读性。很抱歉,谈话这么晚了,但是您对“将null赋值给
a
并始终求值为true(因为赋值成功)”的表达式不正确。它求值为null的值(因此如果null为false,则可能为false)。实际上,存在速度差异。测试
null==var
要慢一条指令,因为null必须被推到堆栈上。不多,但也不完全相同。@Bohemian:这是优化器处理此类微优化的工作