2015-02-24 3 views
-5

Я просто хочу знать, почему компилятор позволит продолжить программу обычно в первом условии:Почему IF условие не выполняется на андроид

public void ButtonOnClickDirectoryList(View v){ 
    try { 
     if (!spnOptionSelectedDepartment.equals(null) && !spnOptionSelectedCities.equals(null)) { 
      if (!spnOptionSelectedTypes.equals(null)) { //code....} 

в spnOptionSelectedDepartment и spnOptionSelectedTypes являются Строки и определены в начале из класс как это:

private String spnOptionSelectedDepartment = null; 
private String spnOptionSelectedCities = null; 
private String spnOptionSelectedTypes = null; 

так, когда я нажимаю на кнопку, это вызвать этот метод, и это те ценности, которые у меня есть в данный момент:

spnOptionSelectedDepartment = "9999" 
spnOptionSelectedCities = null 
spnOptionSelectedTypes = null 

поэтому, когда я положил точку останова на это условие, он просто продолжает проверять остальную часть кода внутри этого, если ... Может ли кто-нибудь объяснить мне, почему это поведение?

Позвольте мне изменить вопрос, да он бросает NullPointer исключение на второй, если ...

if (!spnOptionSelectedTypes.equals(null)) { 

, но почему она позволяет первому IF, когда spnOptionSelectedCities = нуль ...?

+3

'если (spnOptionSelectedTypes! = NULL)' – Blackbelt

+1

Код размещен выше выбросит 'NullPointerException' если' spnOptionSelectedDepartment' является ' null'. –

+0

Вы должны использовать == для сравнения строки с нулем.equals - для сравнения значений двух строк. –

ответ

0

Не следует продолжать, он должен выбросить NullPointerException, чтобы вы могли перехватить блок catch.

При попытке

if (!spnOptionSelectedTypes.equals(null)) 

он должен выбросить это исключение, потому что spnOptionSelectedTypes является недействительным, так что это не String и не имеет какой-либо equals() метода.

Edit:

Это позволяет первый if пройти, потому что она имеет 2 испытания

if (A OR B) { 

Если A является true, условие B не проверяется, поскольку требуется только один, чтобы продолжить , из-за оператора OR.

Edit 2:

С:

если (A и B) {

Если A правда, B также будут испытаны и бросить NullPointerException если spnOptionSelectedCities является недействительным.

Definitive Ответ:

Null тесты в Java

if (x != null && y != null) { 
    x.doSomething(); 
    y.doSomethingElse(); 
} 
+0

спасибо за ответ @Gorcyn, но да, это также строка private String spnOptionSelectedTypes = null; – jugger

+0

Отредактировано для ответа на собственное издание – Gorcyn

+0

hi @Gorcyn Я скопировал код неправильно, это было с && not || – jugger

Смежные вопросы