下面两个代码有什么区别

What is the difference between the two codes below

这里是同一个函数的两个实现。第一个是我自己写的,第二个是我在 http://developer.android.com/guide/topics/location/strategies.html.

上看到的
**1st code:**
private boolean isSameProvider(String provider1, String provider2) {
    if (provider1.equals(provider2)) {
      return true;
    }
    else return false;
}

**2nd code:**
private boolean isSameProvider(String provider1, String provider2) {
    if (provider1 == null) {
      return provider2 == null;
    }
    return provider1.equals(provider2);
}

如果参数 provider1 为 null,则第一段代码可能会抛出 NullPionterException。我们在空对象上调用 provider1.equals(provider2)

第二段代码检查参数provider1是否为空,如果确实为空则检查参数provider2是否为空。

如果 provider1 和 provider2 都为 null,则它们被认为是同一提供者并且此方法 returns 为真。

第二个代码对您的应用来说更安全,因为它会检查以确保 provider1 == null.

但是,如果您的应用程序中的 provider1 和 provider2 往往为空,我宁愿编写如下代码:

private boolean isSameProvider(String provider1, String provider2) {
    if (provider1 != null && provider2 != null) {
        return provider1.equals(provider2);
    }
    return false;
}