Tengo este codigo:
package tests;
import java.util.Hashtable;
public class Tests {
public static void main(String[] args) {
Hashtable<String, Boolean> modifiedItems = new Hashtable<String, Boolean>();
System.out.println("TEST 1");
System.out.println(modifiedItems.get("item1")); // Prints null
System.out.println("TEST 2");
System.out.println(modifiedItems.get("item1") == null); // Prints true
System.out.println("TEST 3");
System.out.println(Boolean.valueOf(null)); // Prints false
System.out.println("TEST 4");
System.out.println(Boolean.valueOf(modifiedItems.get("item1"))); // Produces NullPointerException
System.out.println("FINISHED!"); // Never executed
}
}
Mi problema es que no entiendo por qué la Prueba 3 funciona bien (imprime false
y no produce NullPointerException
) mientras que la Prueba 4 arroja un NullPointerException
. Como puede ver en las pruebas 1 y 2 , null
y modifiedItems.get("item1")
son iguales y null
.
El comportamiento es el mismo en Java 7 y 8.
null
a la misma función no genera un NPE! Hay una buena razón para ello, pero ciertamente es confuso a primera vista :-)
==
se aplica.