Java - это 'null` экземпляр `object`?

Я прочитал это null не является instanceof что угодно, но с другой стороны, что все в Java расширяется Object учебный класс.

7 ответов

Решение

Нет, это reference, ноль не является объектом

String s = null;

System.out.println(s instanceof Object); // false

Одним словом, нет.

Java IAQ Питера Норвига рассматривает этот вопрос более подробно (в частности, " Вопрос: является ли объект пустым?")

Существует также специальный нулевой тип, тип выражения null, который не имеет имени. Поскольку нулевой тип не имеет имени, невозможно объявить переменную нулевого типа или привести к нулевому типу. Нулевая ссылка является единственно возможным значением выражения нулевого типа. Нулевая ссылка всегда может быть приведена к любому типу ссылки. На практике программист может игнорировать нулевой тип и просто делать вид, что нулевой является просто специальным литералом, который может иметь любой ссылочный тип

Спецификация языка Java

Нуль означает, что у вас нет ссылки на объект.

Object o = null;

o является ссылкой, но нет ссылки на объект и для него не выделена память.

o = new Object();

o по-прежнему является ссылкой и содержит адрес, где объект находится в памяти

Нет, null это не объект. Это литерал, который означает, что переменная не ссылается на какой-либо объект.

Как говорит JLS, null имеет нулевой тип, и это не ссылочный тип. Однако его можно использовать в ситуациях, когда ожидается значение ссылочного типа (значение действительно является "дном" в алгебре типов).

Надеясь, что этот пример очистит ваши сомнения:

public void printObject(Object object) {
    System.out.println("object referred");
}

public void printObject(double[] doubleArray) {
    System.out.println("Array of type double");
}

public static void main(String[] args) {
    JavaNullObjectTest javaNullObjectTest = new JavaNullObjectTest();

    javaNullObjectTest.printObject(null); //Array of type double

    javaNullObjectTest.printObject((Object)null); //object referred
}

Мы можем, но, преобразовать "ноль" в объект.

Другие вопросы по тегам