2015-11-20 4 views
0

Вот две реализации одной и той же функции. Первый, написанный мной, и второй, я наткнулся на 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); 
} 
+2

2-й код делает нулевой чек ... Если Provider1 имеет нулевое значение, первый код закончится с NullPointerException ... – convexHull

+0

@convexHull Как 2-й код относится к 1-му коду? –

ответ

2

Первая часть кода может потенциально бросить NullPionterException если параметр provider1 равно нулю. И мы вызываем provider1.equals(provider2) на нулевом объекте.

Вторая часть кода проверяет, является ли параметр provider1 нулевым или нет, если он действительно равен нулю, тогда проверьте, является ли параметр provider2 нулевым.

Если оба поставщика1 и провайдер2 являются нулевыми, они считаются одним и тем же провайдером, и этот метод возвращает true.

0

Второй код более безопасен для вашего приложения, потому что он проверяет, есть ли provider1 == null.

Howevr, если Provider1 и provider2 имеют тенденцию быть пустым в приложении, я предпочел бы написать код вроде этого:

private boolean isSameProvider(String provider1, String provider2) { 
    if (provider1 != null && provider2 != null) { 
     return provider1.equals(provider2); 
    } 
    return false; 
} 
Смежные вопросы