Почему я получаю исключение NullPointerException при сравнении строки с нулем? - PullRequest
12 голосов
/ 01 марта 2010

Мой код разбит на следующую строку с нулевым значением:

 if (stringVariable.equals(null)){

Перед этим оператором я объявляю stringVariable и устанавливаю его в поле базы данных.

В этом утверждении я пытаюсь определить, имеет ли поле значение null, но, к сожалению, оно разрывается!

Есть мысли?

Ответы [ 4 ]

32 голосов
/ 01 марта 2010

Используйте

stringVariable == null

Чтобы проверить, является ли stringVariable null.

Метод equals (и любой другой метод) требует, чтобы stringVariable не было null.

11 голосов
/ 02 марта 2010

, если stringvariable уже равен нулю, он больше не существует как объект String, поэтому у него даже не будет метода .equals! Таким образом, в случае, когда stringvariable равен null, вы действительно делаете null.equals(null), после чего вы получите NullPointerException, потому что null не имеет .equals() способ.

5 голосов
/ 01 марта 2010

Не имеет смысла вызывать метод, равный ему () или иным образом, для переменной, которая может быть нулевой.Вот почему обычно делают что-то вроде:

if ( var != null && var.method(something) ) {
  // var.method() was true
} else {
  // var is null or var.method is false
}

В вашем особом случае было бы достаточно сделать

if (stringVariable == null) {
}

при работе со строками, которые можно заплатить, чтобы проверить Apache Commons StringUtils .

Всегда полезно проверить библиотеки Apache Commons, так как они имеют множество оптимизированных утилит (для строк, коллекций, дат и т. Д.), Которые, как правило, лучше, чем домашние.

1 голос
/ 06 августа 2015

Метод equals () не работает с нулевым параметром.

Метод должен иметь объект или строку в качестве параметра.

public boolean equals(Object anObject)

Поскольку ноль не является объектом. Является ли NULL объектом? .

Также обратитесь к документации по Java 7, в которой говорится, что equals даст результат, если и только если переданный объект не равен нулю.

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals(java.lang.Object)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...