Ответ
Нет, null в Dart не является объектом (экземпляром какого-либо класса, например, Object). Это специальное ключевое слово, обозначающее полное отсутствие значения.
Доказательства и особенности:
void main() {
String? nullableString = null;
String nonNullableString = 'text';
// 1. Проверка типа
print(nullableString is Object); // false
print(nonNullableString is Object); // true
// 2. null имеет собственный тип Null
print(nullableString is Null); // true (если переменная содержит null)
print(null is Null); // true
// 3. Попытка вызова метода или доступа к свойству приведёт к ошибке во время выполнения.
// print(nullableString.length); // Runtime error: NoSuchMethodError
// 4. Безопасный доступ с операторами null-aware
print(nullableString?.length); // null (без ошибки)
print(nullableString ?? 'default'); // 'default'
}
Важность в контексте Sound Null Safety: С введением null safety система типов Dart чётко разделяет nullable и non-nullable типы. Это позволяет предотвратить ошибки разыменования null на этапе компиляции.
String— никогда не может бытьnull.String?— может содержать либоString, либоnull.
Таким образом, null — это отдельное, примитивное значение в системе типов Dart, а не объект.