IsNull: примеры (JAVA)
isNull(Object obj): booleanОписание
Метод Objects.isNull - статический метод из класса java.util.Objects, предназначен для простого определения, равен ли ссылочный объект null. Подходит для ситуаций, где требуется явная и читаемая проверка на null, в том числе при передаче метода как ссылочного выражения (method reference).
Сигнатура:
public static boolean isNull(Object obj)
Аргументы:
- obj - ссылка любого ссылочного типа (reference). При передаче примитивного значения оно автозагружается (autoboxing) в соответствующий wrapper-тип.
Возвращаемое значение:
true, еслиobj == null;false, еслиobj != null.
Примечание: логика является эквивалентом явной проверки obj == null, метод служит для улучшения читабельности и совместимости с API, ожидающими Predicate или ссылку на метод.
Короткие примеры использования
Пример 1 - простая проверка и вывод:
String s = null;
System.out.println(java.util.Objects.isNull(s));
true
Пример 2 - эквивалент с оператором ==:
String s2 = "text";
System.out.println(java.util.Objects.isNull(s2));
System.out.println(s2 == null);
false false
Пример 3 - использование в Stream для выборки только null-элементов:
List list = Arrays.asList("a", null, "b", null);
long nullCount = list.stream().filter(java.util.Objects::isNull).count();
System.out.println(nullCount);
2
Пример 4 - комбинирование с фильтрацией непустых элементов:
List list2 = Arrays.asList("x", null, "y");
List nonNull = list2.stream().filter(java.util.Objects::nonNull).collect(Collectors.toList());
System.out.println(nonNull);
[x, y]
Похожие и сопутствующие методы в Java
- obj == null - прямой оператор сравнения. Быстрее понятен в простых условиях, но не может быть использован как
Predicate. - Objects.nonNull(Object) - противоположность
isNull, полезна в Stream API и других местах, где требуется проверка на не-null. - Optional.isEmpty / Optional.isPresent - для работы с
Optional; проверка на содержимое контейнера, а не на сам объект. - Comparator.nullsFirst / nullsLast - для обработки
nullпри сортировке, не заменяют проверку, но упрощают логику упорядочивания.
Выбор зависит от контекста: для явной логики в потоках и API, ожидающих Predicate, удобнее Objects.isNull/nonNull. В простых условных выражениях оператор == предпочтителен из-за непосредственности.
Аналоги в других языках и отличия
- PHP:
is_null($var). Возвращает true, когда значение строго равно null.$a = null; echo is_null($a) ? 'true' : 'false';true
- JavaScript: строгая проверка
=== nullили утилита lodash_.isNil(value)(возвращает true для null и undefined).let v = null; console.log(v === null);true
- Python: проверка с помощью
is None.v = None print(v is None)True
- SQL: оператор
IS NULLв выражениях WHERE.SELECT * FROM table WHERE column IS NULL;-- возвращает строки с NULL в column
- C#: проверка
== nullдля ссылочных типов; с nullable value types используется.HasValue.string s = null; Console.WriteLine(s == null);True
- Lua:
== nilдля проверки отсутствия значения.local x = nil print(x == nil)true
- Go: сравнение с
nilдля указателей, срезов, карт, интерфейсов и т.д.var p *int fmt.Println(p == nil)true
- Kotlin: оператор
== nullили использование безопасного вызова и операторов обработки null. В стандартной библиотеке есть функции типаisNullOrEmptyдля коллекций и строк.val s: String? = null println(s == null)true
Отличие Java-метода Objects.isNull в том, что это статический метод, удобный для передачи как Predicate. В других языках обычно используется синтаксическая проверка или отдельные утилиты, иногда с расширенной семантикой (например, lodash isNil учитывает undefined в JS).
Типичные ошибки при использовании
-
Неправильное ожидание поведения с Optional:
Optionalopt = Optional.empty(); System.out.println(java.util.Objects.isNull(opt)); System.out.println(opt.isEmpty()); false true
Объяснение: объект
Optionalсам по себе не равенnull, поэтомуObjects.isNull(opt)вернетfalse. Для проверки отсутствия значения следует использовать методыisEmptyилиisPresent. -
Ошибки при доступе к методам без проверки:
String s = null; int len = s.length(); // NullPointerExceptionException in thread "main" java.lang.NullPointerException at ...
Объяснение: проверку нужно выполнять прежде чем вызывать методы у переменной, например с помощью
Objects.isNullили безопасной логики. -
Ошибочная надежда на расширенную семантику:
String empty = ""; System.out.println(java.util.Objects.isNull(empty));false
Объяснение: пустая строка не равна
null. Для проверки пустоты используетсяisEmpty()илиStringUtils.isBlank().
Изменения и история
Метод Objects.isNull появился с появлением утилитного класса java.util.Objects в современных версиях JDK и используется вместе с Objects.nonNull для работы с функциональными интерфейсами, особенно после внедрения Stream API. С момента введения метод оставался простым обёрткой над проверкой == null и крупных изменений не претерпевал. Рекомендуется проверять совместимость при использовании старых версий JVM, в очень старых релизах данный метод может отсутствовать.
Расширенные и редкие варианты применения
Пример 1 - подсчёт и группировка null/не-null элементов:
List items = Arrays.asList(null, "a", "", null, "b");
Map> partition = items.stream()
.collect(Collectors.partitioningBy(java.util.Objects::isNull));
System.out.println(partition.get(true));
System.out.println(partition.get(false));
[null, null] [a, , b]
Пример 2 - сортировка с учётом null через Comparator.nullsFirst вместе с nonNull:
List names = Arrays.asList("Bob", null, "Alice");
names.sort(Comparator.nullsFirst(Comparator.naturalOrder()));
System.out.println(names);
[null, Alice, Bob]
Пример 3 - использование isNull в пользовательской обработке данных при десериализации:
Map data = new HashMap<>();
data.put("a", null);
String value = data.get("a");
if (java.util.Objects.isNull(value)) {
value = "default";
}
System.out.println(value);
default
Пример 4 - метод-референс в сложных выражениях Stream и Optional:
List raw = Arrays.asList("1", null, "2", "3");
List parsed = raw.stream()
.filter(java.util.Objects::nonNull)
.map(Integer::valueOf)
.collect(Collectors.toList());
System.out.println(parsed);
[1, 2, 3]
Пример 5 - подсчёт null для разных типов с учётом автозапаковки:
List ints = Arrays.asList(1, null, 3);
long missing = ints.stream().filter(java.util.Objects::isNull).count();
System.out.println(missing);
1
Пояснения: метод удобен при построении декларативной логики с потоками, при создании предикатов и для повышения читаемости. В сценариях, требующих контроля над производительностью в «горячих» циклах, прямая проверка == null может быть предпочтительнее за счёт минимального накладного кода.