En Java, la palabra Null significa que, una variable que está referenciando a cierto objeto, no encuentra dicho objeto. Es decir, que la variable está declarada pero, por el contrario, no se está referenciando a ningún objeto.
Null está fuertemente relacionado a java.lang.NullPointerException. Como es una clase en el paquete java.lang, se llama cuando se intenta realizar algunas operaciones con o sin null.
A continuación, os dejamos algunas características de Null en Java
Se puede llegar a decir que null es literal en Java, ya que las palabras clave distinguen entre mayúsculas y minúsculas en java, por lo que no puede escribir NULL o 0.
public class Test
{
public static void main (String[] args) throws java.lang.Exception
{
// error en tiempo de compilación: no se puede encontrar el símbolo 'NULL'
Object obj = NULL;
//lo siguiente se ejecuta con éxito
Object obj1 = null;
}
}
Salida:
error: cannot find symbol
can't find symbol 'NULL'
^
variable NULL
class Test
1 error
Toda variable de referencia en Java tiene un valor predeterminado nulo.
public class Test
{
private static Object obj;
public static void main(String args[])
{
// imprimira nulo;
System.out.println("El valor del objeto obj es : " + obj);
}
}
Salida:
El valor del objeto obj es : null
Null no es un objeto ni un tipo, es un valor especial, que se puede asignar a todo tipo de referencia y se puede castear null a cualquier tipo. A continuación se pueden observar algunos ejemplos:
// null se puede asignar a String
String str = null;
// tambien puedes asignar null a Integer
Integer itr = null;
// null también se puede asignar a Double
Double dbl = null;
//null se puede castear a String
String myStr = (String) null;
// también puede ser casteado a Integer
Integer myItr = (Integer) null;
// si es posible, no hay error
Double myDbl = (Double) null;
Mientras se ejecutan las operaciones de autoboxing y unboxing, el compilador indica un error de excepción Nullpointer, si se asigna un valor nulo al tipo de datos en recuadro primitivo.
public class Test
{
public static void main (String[] args) throws java.lang.Exception
{
//Un número entero puede ser nulo, así que esto está bien
Integer i = null;
//Unboxing null a integer lanza NullpointerException
int a = i;
}
}
Salida:
Exception in thread "main" java.lang.NullPointerException
at Test.main
El operador instanceof de Java se emplea para determinar si el objeto es una instancia del tipo especificado (clase, subclase o interfaz). Durante la ejecución, el resultado del operador instanceof es verdadero si el valor de la expresión no es nulo.
Esta importante propiedad hace que la operación instanceof, que lo hace útil para las verificaciones de conversión de tipo.
public class Test
{
public static void main (String[] args) throws java.lang.Exception
{
Integer i = null;
Integer j = 10;
//imprime false
System.out.println(i instanceof Integer);
//Compila con exito
System.out.println(j instanceof Integer);
}
}
Salida:
false
true
No se puede llamar a un método no estático en una variable de referencia con valor nulo, arrojará NullPointerException, pero si se puede invocar al método estático con variables de referencia con valores nulos.
Como los métodos estáticos están vinculados mediante el enlace estático, no lanzarán NullPointerException.
public class Test
{
public static void main(String args[])
{
Test obj= null;
obj.staticMethod();
obj.nonStaticMethod();
}
private static void staticMethod()
{
//Puede ser llamado por referencia nula
System.out.println("metodo estatico, puede ser llamado por referencia nula");
}
private void nonStaticMethod()
{
//Can not be called by null reference
System.out.print(" Metodo no estatico- ");
System.out.println("no puede ser llamado por referencia nula");
}
}
Salida:
Exception in thread "main" java.lang.NullPointerException
at Test.main
metodo estatico, puede ser llamado por referencia nula
Emplear los operadores == y !=, puede ser muy útil en la comprobación de null con objetos en Java.
public class Test
{
public static void main(String args[])
{
//return true;
System.out.println(null==null);
//return false;
System.out.println(null!=null);
}
}
Salida:
true
false