检查null - 什么顺序?

blu*_*sky 13 java

检查空值时,我使用:

String str;

if(str == null){
    //...
}
Run Code Online (Sandbox Code Playgroud)

但我也见过这个:

if(null == str){
    //...
}
Run Code Online (Sandbox Code Playgroud)

使用一个优于另一个是否有任何优势?或者只是为了提高可读性?

thk*_*ala 32

null == x会议通常是在由熟悉C,其中的转让也可以是表达人写的代码中发现的.一些C程序员这样写代码,这样,如果他们错过了=

if (NULL == ptr)...
Run Code Online (Sandbox Code Playgroud)

代码将无法编译,因为NULL = ptr它不是有效的赋值.这可以防止在代码库中引入相当狡猾的错误,尽管现代C编译器会使这些约定过时,只要一个人注意启用和读取生成的警告......

这种编码风格在Java中从未有过任何用处,其中引用赋值不能用作布尔表达式.它甚至可以被认为是反直觉的; 在他们的自然语言中,大多数人会说"如果X为空......""如果X等于17 ......",而不是"如果null等于X ......".


Sir*_*rko 30

第二个版本(null == str)称为yoda条件.

它们都会产生相同的行为,但第二个有一个优点:它可以防止您在忘记变量时意外更改变量=.在这种情况下,编译器会在该行返回一个错误,并且您没有留下代码的奇怪行为以及由此产生的调试.

  • 这取决于.正如用户thkala指出的那样,在Java中并不重要.然而,在C语言中,像LLVM的Clang这样的现代编译器通过"使用赋值结果作为没有括号的条件"来警告你. (6认同)