2013-02-13 2 views
4

Каков наилучший способ проверки не нулевых значений в java.Java строка null проверка by! = Null или! Str.equals (null)?

String query ="abcd"; 

query != null против !query.equals(null).

что лучше? Почему?

+0

.equals по умолчанию == до тех пор, как это явно не переопределены. –

+0

@JaynathanLeung. Вы говорите о' String' объекты тоже? –

+0

@RohitJain есть ли какие типы ' String', которые не являются объектами? Нет никакого примитивного эквивалента, насколько я знаю ... –

ответ

24

первый один лучшеединственный вариант), потому что второй один выбросит NPE, когда ваше значение на самом деле null. Проще.

Попробуйте это:

String str = null; 
str.equals(null); // will throw `NPE`. 

Так в основном, тест, который вы хотели бы выполнить самостоятельно запускает в 2-ом случае с NullPointerException. Таким образом, это не выбор.

+5

NPE = NullPointerException для тех, кто не знает аббревиатуры –

+0

Это неправильно. «String.equals' не будет бросать NPE. Поскольку он проверяет 'instanceof', который не генерирует исключение для' null' – Cratylus

+0

«Better» - это крайнее преуменьшение здесь. Второе не делает вообще то, что вы ожидаете. – djechlin

2

query != null лучше !query.equals(null) будет генерировать исключение, когда запрос на самом деле равен нулю. Также query != null легко читается

11

!str.equals(null) будет

  1. всегда возвращает ложь, если она не бросает исключение, и
  2. сгенерирует исключение, если строка является нулевой

Точки нуля проверьте, чтобы ссылка, в этом коде str, фактически относится к объекту. Если он равен нулю, вы не можете вызвать любые методы, в том числе equals, не выбрасывая NullPointerException ..., который следует избегать нулевой проверки.

Таким образом, !str.equals(null) приводит к тому, что самые проблемы с нулевыми проверками предназначены для предотвращения и не делают то, что вы думаете вообще. Никогда не делай этого.

+0

+1, я сделал то же самое о 'str.equals (null)' всегда возвращал false, но мой ответ не ясен о конкретном вопрос .. :) – PermGenError

2

query != null сравнивает, если объект null. query.equals("something") сравнивает значение внутри этого объекта. string == "something». Так что в этом случае использование query != null.

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