Java:"xx".equals(变量)比variable.equals("xx")更好,是吗?

Xer*_*erg 17 java equals manual

我正在审查一本最佳实践手册和推荐编码java,我认为这是值得怀疑的.

Recomendation:

String variable;

"xx".equals(variable) // OK

variable.equals("xx") //Not recomended
Run Code Online (Sandbox Code Playgroud)

因为防止出现不受控制的NullPointerException

这是真的?

Mar*_*ers 26

这是一种非常常见的技术,如果变量为null而不是抛出a,则会导致测试返回false NullPointerException.但我想我会有所不同,并说我不会认为这是你应该遵循的建议.

  • 我绝对认为这是所有Java程序员都应该注意的事情,因为它是一种常见的习语.
  • 它也是一种使代码更简洁的有用技术(您可以同时处理null和非null的情况).

但:

  • 它使你的代码更难读:"如果蓝色是天空..."
  • 如果您刚刚检查过您的参数在前一行中不为null,那么就没有必要了.
  • 如果您忘记测试null并且某人确实带有您不期望它的null参数,那么a NullPointerException不一定是最糟糕的结果.假装一切都没关系,一直到最后都失败,这不是一个更好的选择.快速失败是好事.

我个人并不认为这个技术的使用应在所有情况下是必需的.我认为应该由程序员根据具体情况做出判断.重要的是要确保以适当的方式处理空案​​例,以及如何执行此操作取决于具体情况.检查空值的正确处理可能是测试/代码审查指南的一部分.

  • “这会让你的代码更难阅读:“如果天空是蓝色……”——也称为 yoda 条件——http://en.wikipedia.org/wiki/Yoda_conditions (2认同)

Dav*_*d Z 10

是真的.如果variablenull在你的榜样,

variable.equals("xx");
Run Code Online (Sandbox Code Playgroud)

将抛出一个NPE,因为你不能equals在null对象上调用method().但

"xx".equals(variable);
Run Code Online (Sandbox Code Playgroud)

只会毫无错误地返回false.