2017-02-01 2 views
0

Почему, когда я пытаюсь сделать следующее: (в java)Java строка равно буквального предупреждающее сообщение

if (reason.equals("time")) { // my code } 

Среда IDE показывает мне следующее предупреждение:

метод вызова "(?) reason.equals ("time") 'может производить' java.lang.NullPointerException '

Я не смог найти абстрактное объяснение этому предупреждающему сообщению.

+1

Это сообщая вам, что в этот момент кода «разум» может быть «null»; и если это так, ваша программа выдает исключение. – khelwood

+0

Если вы знаете, что такое «NullPointerException», это предупреждение не должно быть так сложно понять. Таким образом, я предполагаю, что вы захотите прочитать [Что такое исключение NullPointerException и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do- i-fix-it) – Thomas

ответ

6

Если reason is null, у вас будет null.equals("time"), который вызывает NullPointerException. Чтобы исправить это, просто замените два: "time".equals(reason);

5

Это ваша IDE, симпатичная. Если reason - null, то вы вполне можете получить java.lang.NullPointerException.

Общим обходным путем является использование java.util.Objects.equals(reason, "time"). Эта функция будет выполнять любые проверки null.

Хотя для этого конкретного случая, крутые кошки, зная, что литерал безусловно не null, перепишет по выражению Yoda

"time".equals(reason)

Ссылка: https://en.wikipedia.org/wiki/Yoda_conditions

+1

«Yoda Expression» - никогда не слышал, чтобы его называли до, но, конечно, подходящим;) – Thomas

+0

@Thomas: Я добавил ссылку, которая на момент написания содержит случай строки Java. – Bathsheba

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