null

Модуль 1. Java Syntax
12 уровень , 4 лекция
Открыта

Чтобы понять, для чего нужен null в Java, приведем аналогию с числами: число 0 символизирует отсутствие чего-либо, а null означает то же самое для ссылочных типов данных. Если полю ссылочного типа (String, Object, StringBuilder) не присвоить никакого знания, по аналогии с примитивными типами оно получит значение по умолчанию, и этим значением будет null:

Код Вывод на экран

public class Solution {

    public static int i;
    public static String s;

    public static void main(String[] args) {
        System.out.println(i);
        System.out.println(s);
    }
}
                    
0
null

А если объявить массив таким способом:


String[] strings = new String[12];

создастся массив, содержащий 12 элементов, и все они будут равны null:

Код Вывод на экран

public class Solution {
    public static void main(String[] args) {
        String[] strings = new String[12];

        for (int i = 0; i < strings.length; i++) {
            System.out.println(i + "-й элемент: " + strings[i]);
        }
    }
}
                    
0-й элемент: null
1-й элемент: null
2-й элемент: null
3-й элемент: null
4-й элемент: null
5-й элемент: null
6-й элемент: null
7-й элемент: null
8-й элемент: null
9-й элемент: null
10-й элемент: null
11-й элемент: null

Как видишь, при конкатенации со строкой null превращается в строку “null”. Хотя, если вызвать у него метод toString():


String[] strings = null;
System.out.println(strings.toString());

получишь NullPointerException (исключения мы позже разберем подробно). То же самое произойдет, если попытаться вызвать у null любой другой метод (исключение – статические методы, с которыми ты скоро познакомишься):


public static void main(String[] args) {
    StringBuilder sb = null;
    sb.append("test"); // скомпилируется, но при выполнении будет ошибка
}

null, помимо прочего, — зарезервированное ключевое слово (как public или static), так что не получится создать переменную, метод, или класс с именем null. Это ключевое слово, как и другие, регистрозависимое (ты мог обратить внимание, что мы везде пишем null с маленькой буквы), поэтому:


String firstName = Null; // будет ошибка компиляции

String secondName = NULL; // будет ошибка компиляции

String fullName = null; // скомпилируется

Рассмотрим, что еще можно и нельзя делать с null:

  • Любой ссылке можно присвоить null:

    
    StringBuilder sb = null;
                
  • null можно привести к любому ссылочному типу:

    
    String s = (String) null; // скомпилируется, хотя смысла не прибавит :)
                
  • null нельзя присвоить примитивной переменной:

    
    int i = null; // не скомпилируется
                
  • null можно сравнивать с помощью == и !=

  • null == null возвращает true

В предыдущих лекциях мы рассказывали, что в Java все является объектом, и у каждого объекта есть тип.

Что в этом отношении мы можем сказать о null? null – это литерал некоего типа, и у этого типа нет имени. А так как у этого типа нет имени, невозможно объявить переменную этого типа, или произвести приведение к нему. Таким образом, null – единственный представитель этого безымянного типа. На практике же мы можем игнорировать этот тип, и представлять null как специальный литерал, который можно присвоить переменной любого ссылочного типа.

Что важно запомнить:

  • null – это значение по умолчанию для ссылочных типов данных;
  • null – это "отсутствие значения";
  • если у объекта, значение которого равно null, вызвать какой-либо метод – компиляция такого кода пройдет, а во время выполнения получим исключение NullPointerException.
12
Задача
Java Syntax Pro, 12 уровень, 4 лекция
Недоступна
Двигатель — сердце автомобиля
Двигатель — сердце автомобиля
12
Задача
Java Syntax Pro, 12 уровень, 4 лекция
Недоступна
Утильный калькулятор
Утильный калькулятор
12
Задача
Java Syntax Pro, 12 уровень, 4 лекция
Недоступна
Объекты внутренних и вложенных классов
Объекты внутренних и вложенных классов
Комментарии (14)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Искендер Уровень 1
28 ноября 2025
да уж, магия какая-то, до этой лекции четко знал и различал Null, ноль и Undefined, а теперь стало непонятно чуть более чем полностью
7 июня 2023
null можно представить в виде ссылки на "ничто"
Николай Уланов Уровень 13
2 января 2022
Ребят, по всей видимости это отсылка в предыдущим лекциям. Тут объявили переменную типа лекция:

Lecture lvl12L4;
И забыли через конструктор объявить ссылку на созданный объект. Давайте поможем разрабам:

lvl12L4 = new Lecture();
Николай Уланов Уровень 13
2 января 2022
Не помогло(
Владимир Уровень 48 Expert
11 января 2022
/slap
Pixta Уровень 108 Expert
29 декабря 2021
ждем
Владимир Уровень 48 Expert
11 января 2022
/slap
Pixta Уровень 108 Expert
12 января 2022
спасибо
Роман Уровень 29
28 декабря 2021
Маякните кто-нибудь, когда тема появится
Владимир Уровень 48 Expert
11 января 2022
Вроде появилась. Во всяком случае в рамках JRU.
Роман Уровень 29
12 января 2022
Благодарю!
Sergey Drogunov Уровень 117 Expert
16 декабря 2021
Владимир Уровень 48 Expert
11 января 2022
/slap
Виктор Шефф Уровень 111 Expert
7 декабря 2021
Здесь уже null ))