IsNull: примеры (JAVA)

Проверка на null в Java с помощью isNull
Раздел: Верификация (валидация)
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:

    Optional opt = 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(); // NullPointerException
    Exception 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 элементов:

Пример java
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:

Пример java
List names = Arrays.asList("Bob", null, "Alice");
names.sort(Comparator.nullsFirst(Comparator.naturalOrder()));
System.out.println(names);
[null, Alice, Bob]

Пример 3 - использование isNull в пользовательской обработке данных при десериализации:

Пример java
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:

Пример java
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 для разных типов с учётом автозапаковки:

Пример java
List ints = Arrays.asList(1, null, 3);
long missing = ints.stream().filter(java.util.Objects::isNull).count();
System.out.println(missing);
1

Пояснения: метод удобен при построении декларативной логики с потоками, при создании предикатов и для повышения читаемости. В сценариях, требующих контроля над производительностью в «горячих» циклах, прямая проверка == null может быть предпочтительнее за счёт минимального накладного кода.

джава isNull function comments

En
IsNull Checks if an object reference is null