Avatar ·

Что такое null/nil в Java и как с ним работать?

Всем привет! Разбираюсь с основами Java и столкнулся с концепцией null. В некоторых языках (например, в SQL или Go) я привык к термину nil. Правильно ли я понимаю, что в Java нет nil, а используется только null? И если да, то что это вообще такое — пустая ссылка или специальное значение?

Проблема возникла, когда я написал простой код с классом User и попытался вызвать метод у объекта, который я не инициализировал:

public class User {
    String name;

    void printName() {
        System.out.println(name.length());
    }

    public static void main(String[] args) {
        User user = null;
        user.printName(); // Здесь вылетает NullPointerException
    }
}

Я ожидал, что если user равен null, то метод просто ничего не сделает или вернет пустую строку. Но вместо этого программа падает с ошибкой.

Я уже пробовал:

  • Проверять через if (user != null) — это работает, но выглядит громоздко.
  • Читал про Optional, но не до конца понимаю, как его правильно применять в таких простых случаях.
  • Пытался использовать Objects.requireNonNull, но это тоже выкидывает исключение.

Подскажите, пожалуйста:

  1. Как правильно работать с null в Java, чтобы избежать NullPointerException?
  2. Есть ли в Java аналог nil из других языков?
  3. Может быть, я должен всегда явно инициализировать поля (например, User user = new User())?

Буду благодарен за примеры кода и best practices.