2010-12-16 14 views
31

He leído que null no es un instanceof cualquier cosa, pero por otro lado que todo en Java extiende la clase Object.Java - ¿`null` es una instancia de` object`?

+4

Los tipos primitivos ('int',' bool', etc.) no son subtipos de 'Objeto'. –

+0

Posible duplicado http://stackoverflow.com/questions/519631/is-null-a-java-keyword –

Respuesta

56

No, es un reference. null no es un objeto

String s = null; 

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

@ChristianSchnorr 'Cadena s =" ";' hace referencia a un objeto String cuyo contenido interno (una matriz char) está vacío. Por otro lado, 'String s = null' no hace referencia a nada. –

+0

@ HudsonPenaMagalhães ¿Y qué? Puede que no haga referencia a nada "real", sino que apunta a nada, pero es una referencia, no obstante. –

3

Nulo significa que no tiene una referencia a un objeto.

Object o = null; 

o es una referencia pero no se hace referencia a ningún objeto ni se le asigna memoria.

o = new Object(); 

o sigue siendo una referencia y mantiene la dirección donde se encuentra el objeto en la memoria

2

No, null no es un objeto. Es un literal que significa que una variable no hace referencia a ningún objeto.

8

En una palabra, no.

de Peter Norvig Java IAQ trata esta cuestión con cierto detalle (en concreto "Q: Is null an Object?")

+0

Gracias por la gran referencia, que no conocía. – JDelage

+0

acaba de echar un vistazo rápido y en realidad hay un anclaje que salta directamente a la respuesta relevante en el IAQ así que he actualizado su enlace – mikej

+0

@mikej Gracias, quién sabe cómo logré pasarlo por alto. – NPE

5

También hay un tipo especial null, el tipo de la nula expresión, que tiene ningún nombre. Como el tipo nulo no tiene el nombre , es imposible declarar una variable del tipo nulo o para convertir en el tipo nulo. La referencia nula es el único valor posible de una expresión de tipo nulo. La referencia nula siempre se puede convertir a cualquier tipo de referencia . En la práctica, la programador puede ignorar el tipo nulo y justo pretender que nulo no es más que un literal especial que pueden ser de cualquier tipo referencia

Java Language Specification

1

A medida que el JLS dice, null es de el tipo nulo y que no es un tipo de referencia. Sin embargo, se puede usar en situaciones donde se espera un valor de un tipo de referencia (el valor es realmente un "fondo" en el tipo de álgebra).

0

Con la esperanza de que este ejemplo borra la duda:

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 
} 

Podemos pero, convertir un 'nulo' a objetar.

Cuestiones relacionadas