Каков наилучший способ проверки не нулевых значений в java.Java строка null проверка by! = Null или! Str.equals (null)?
String query ="abcd";
query != null
против !query.equals(null).
что лучше? Почему?
Каков наилучший способ проверки не нулевых значений в java.Java строка null проверка by! = Null или! Str.equals (null)?
String query ="abcd";
query != null
против !query.equals(null).
что лучше? Почему?
первый один лучше (а единственный вариант), потому что второй один выбросит NPE
, когда ваше значение на самом деле null
. Проще.
Попробуйте это:
String str = null;
str.equals(null); // will throw `NPE`.
Так в основном, тест, который вы хотели бы выполнить самостоятельно запускает в 2-ом случае с NullPointerException
. Таким образом, это не выбор.
NPE = NullPointerException для тех, кто не знает аббревиатуры –
Это неправильно. «String.equals' не будет бросать NPE. Поскольку он проверяет 'instanceof', который не генерирует исключение для' null' – Cratylus
«Better» - это крайнее преуменьшение здесь. Второе не делает вообще то, что вы ожидаете. – djechlin
query != null
лучше !query.equals(null)
будет генерировать исключение, когда запрос на самом деле равен нулю. Также query != null
легко читается
!str.equals(null)
будет
Точки нуля проверьте, чтобы ссылка, в этом коде str
, фактически относится к объекту. Если он равен нулю, вы не можете вызвать любые методы, в том числе equals
, не выбрасывая NullPointerException
..., который следует избегать нулевой проверки.
Таким образом, !str.equals(null)
приводит к тому, что самые проблемы с нулевыми проверками предназначены для предотвращения и не делают то, что вы думаете вообще. Никогда не делай этого.
+1, я сделал то же самое о 'str.equals (null)' всегда возвращал false, но мой ответ не ясен о конкретном вопрос .. :) – PermGenError
query != null
сравнивает, если объект null
. query.equals("something")
сравнивает значение внутри этого объекта. string == "something
». Так что в этом случае использование query != null
.
.equals по умолчанию == до тех пор, как это явно не переопределены. –
@JaynathanLeung. Вы говорите о' String' объекты тоже? –
@RohitJain есть ли какие типы ' String', которые не являются объектами? Нет никакого примитивного эквивалента, насколько я знаю ... –