我听到某人null == object比object == null 检查更好
例如:
void m1(Object obj ) {
if(null == obj) // Is this better than object == null ? Why ?
return ;
// Else blah blah
}
Run Code Online (Sandbox Code Playgroud)
有什么理由还是这是另一个神话?感谢帮助.
Lau*_*ves 135
这可能是从C学习的习惯,以避免这种拼写错误(单一=而不是双重==):
if (object = null) {
Run Code Online (Sandbox Code Playgroud)
将常量放在左侧的约定==在Java中并不真正有用,因为Java要求表达式if求值为一个boolean值,所以除非常量是a boolean,否则你会得到一个编译错误.参数.(如果它是一个布尔值,你不应该使用==...)
Jon*_*eet 31
正如其他人所说,这是从C中学到的习惯,以避免拼写错误 - 尽管即使在C中我也希望有足够警告级别的优秀编译器发出警告.正如Chandru所说,以这种方式与Java中的null进行比较只会导致问题,如果您使用的是类型变量Boolean(您不在示例代码中).我会说这是一种非常罕见的情况,而且不值得改变你在其他地方编写代码的方式.(即使在这种情况下,我也不会费心扭转操作数;如果我想清楚地考虑反转它们,我相信我可以算出等号.)
什么也没有被提及的是,很多人(当然我自己在内)发现的if (variable == constant)形式可读性更强-这是表达自己的更自然的方式.这是不要盲目地从C复制约定的原因.在假设在一个环境中可能有用的东西在另一个环境中有用之前,你应该总是质疑实践(就像你在这里做的那样:).
Cha*_*kar 27
除了对象的类型之外,这在Java(1.5+)中没有多大价值Boolean.在这种情况下,这仍然可以很方便.
if (object = null)如果是对象,则不会导致Java 1.5+中的编译失败,Boolean但会NullPointerException在运行时抛出.
在Java中没有充分的理由.
其他几个答案声称这是因为你可能会意外地将其分配而不是平等.但是在Java中,你必须在if中有一个布尔值,所以这个:
if (o = null)
Run Code Online (Sandbox Code Playgroud)
不会编译.
在Java中唯一可能重要的是变量是否为布尔值:
int m1(boolean x)
{
if (x = true) // oops, assignment instead of equality
Run Code Online (Sandbox Code Playgroud)
这也与以下因素密切相关:
if ("foo".equals(bar)) {
Run Code Online (Sandbox Code Playgroud)
如果您不想处理NPE,这很方便:
if (bar!=null && bar.equals("foo")) {
Run Code Online (Sandbox Code Playgroud)
这个伎俩应该可以防止v = null一些错别字.
但Java只允许布尔表达式作为if()条件,因此技巧没有多大意义,编译器无论如何都会找到那些错别字.
尽管如此,它仍然是C/C++代码的宝贵技巧.