Java - это 'null` экземпляр `object`?
Я прочитал это null
не является instanceof
что угодно, но с другой стороны, что все в Java расширяется Object
учебный класс.
7 ответов
Нет, это reference
, ноль не является объектом
String s = null;
System.out.println(s instanceof Object); // false
Одним словом, нет.
Java IAQ Питера Норвига рассматривает этот вопрос более подробно (в частности, " Вопрос: является ли объект пустым?")
Существует также специальный нулевой тип, тип выражения null, который не имеет имени. Поскольку нулевой тип не имеет имени, невозможно объявить переменную нулевого типа или привести к нулевому типу. Нулевая ссылка является единственно возможным значением выражения нулевого типа. Нулевая ссылка всегда может быть приведена к любому типу ссылки. На практике программист может игнорировать нулевой тип и просто делать вид, что нулевой является просто специальным литералом, который может иметь любой ссылочный тип
Нуль означает, что у вас нет ссылки на объект.
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
}
Мы можем, но, преобразовать "ноль" в объект.