哪个是更好的空检查方法?

Abh*_*h28 2 java

我遇到了这两种对字符串对象进行空检查的方法.

给定一个字符串对象String str ="example";

  1. If(str.someMethod() != null ) 要么
  2. If (null != str.someMethod())

为什么我们更喜欢第二个?这背后的确切原因是什么,它与性能有关吗?

T.J*_*der 8

在你的例子中,它与你做的完全没有区别(除了样式),因为Yoda检查的原因是为了避免意外地进行任务(但是继续阅读为什么这在Java中无关紧要),你可以' t分配调用方法的结果.

关于Java的一个好处是,即使你正在测试str,例如:

if (str == null)
Run Code Online (Sandbox Code Playgroud)

if (null == str)
Run Code Online (Sandbox Code Playgroud)

将有仍然是没有区别的,而在一些语法语言从B(诸如C,C++,d,JavaScript等)衍生的,人们做第二个(一个"尤达测试")来的这个几率最小化BUG:

if (str = null)          // Not an issue in Java
Run Code Online (Sandbox Code Playgroud)

例如,在C或JavaScript中,将分配 nullstr,然后评估结果,将其强制转换为布尔值,而不是分支.但在Java中,这是编译器告诉你的语法错误.

Java没有做那种布尔转换,所以在Java中使用Yoda检查的唯一原因是你是在测试布尔值,ec

boolean flag;
// ...
if (flag == false)
Run Code Online (Sandbox Code Playgroud)

在那里,你可能会想到这是偶然的:

if (flag = false)
Run Code Online (Sandbox Code Playgroud)

但是因为使用==!=使用布尔是完全没必要的(你只是使用if (flag)if (!flag)),在现实世界中你根本不需要用Java进行Yoda检查.

这并不意味着人们仍然不会使用它们,这是他们个人风格的问题.在Java中,没有客观的理由.