考虑以下两行代码
if (test ! = null)
和
if (null != test)
在性能方面,上述两个陈述有什么区别吗?我见过很多人使用后者,当被问到时,他们说这是没有充分理由的最佳实践。
没有不同。
第二个仅仅是因为 C/C++ 程序员总是做赋值而不是比较。
例如
// no compiler complaint at all for C/C++
// while in Java, this is illegal.
if(a = 2) {
}
// this is illegal in C/C++
// and thus become best practice, from C/C++ which is not applicable to Java at all.
if(2 = a) {
}
而java编译器会产生编译错误。
所以我个人更喜欢第一个,因为可读性,人们倾向于从左到右阅读,if test is not equal to null
而不是null is not equal to test
.
它们完全相同。使用 equals 时,第二个是有意义的:
if("bla".equals(test))
永远不能抛出一个NullPointerException
while:
if(test.equals("bla"))
能够。
没有性能差异,但我个人觉得第二个令人困惑。
第二个对我来说就像“尤达条件”,即if(2 == x) ...
可读性要差得多。
最好的做法是避免大多数现代 IDE 会出现的一些基本错字,因为有时您想在不为空的更复杂类型之间进行比较,最终导致意外分配。所以模式保持不变,但我从未见过这与性能有关,也从未见过它生成特殊的字节码。
这个想法是首先获得静态的已知值,因此在执行比较时不能抛出任何奇怪的异常。
不过,这两种方法都不是“更正确”,因此完全由您决定要使用什么。
没有区别。但是在第二种方式中,您可以避免像test = null
. 因为第二种方式你会得到编译器错误。
使用后者不是最佳实践。两者是等价的,但前者更容易阅读。
这种“最佳实践”来自不存在布尔值的 C 语言。而是使用整数,if (foo = 1)
这不是语法错误,而是与if (foo == 1)
.
在 Java 中,if 中只能包含布尔表达式,这种做法没有多大意义。
两种形式之间没有真正的不同。没有性能问题,但有以下注意事项:
=
中,运算符用于赋值,==
运算符用于等效测试,但人们通常使用 inif
语句=
而不是,因为 null 不能在赋值语句中使用,因此==
第二种方法开发人员会得到。Compile-Time-Error
Left-Side