У меня есть условие if
, на котором оценивается адрес электронной почты. Я проверяю 2 вещиЕсли условия не закорачиваются правильно
- Он имеет символ «@»
- После первого знака @, это заканчивается «gmail.com».
Мое понимание короткого замыкания заключается в том, что если первое условие в операторе OR (||) истинно, то второе не будет оцениваться. И все же я получаю NullPointerException
, потому что второй оператор действительно оценивается (я его протестировал).
Что я не понимаю о коротком замыкании здесь?
Соответствующий код приведен ниже:
FYI: emailtext от элемента EditText и в этом случае "notavalidemail"
String[] split = emailtext.split("@", 2);
final AlertDialog.Builder notifier = new AlertDialog.Builder(this);
Log.i("GetToken","Split[0]=" + split[0] + "; length=" + split.length);
if (split.length == 1 || !split[1].equals("gmail.com")) {
//Tell the user they didn't enter a correct gmail
}
Бревно в коде возвращает это:
05-02 13:51:16.447 27553-27553/com.farmsoft.lunchguru.app I/GetToken﹕ Split[0]=notavalidemail; length=1
Как это может привести к исключению NullPointerException? Если это действительно так: 'length = 1', вы должны получить IndexOutOfBoundsException; но это невозможно, '||' действительно короткое замыкание. –
Можете ли вы представить воспроизводимый пример для нас с помощью ввода, который вызывает эту проблему? Таким образом, мы можем запустить его самостоятельно (и что более важно: часто это помогает вам найти его самостоятельно, потому что вы изолируете проблемную область). –
Ну, очевидно, 'split [1]' is 'null'. – 2rs2ts