Eu tenho este código:
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
}
}
Meu problema é que não entendo por que o Teste 3 funciona bem (imprime false
e não produz NullPointerException
), enquanto o Teste 4 gera a NullPointerException
. Como você pode ver nos testes 1 e 2 , null
e modifiedItems.get("item1")
são iguais a e null
.
O comportamento é o mesmo em Java 7 e 8.
null
para a mesma função não gera um NPE! Há uma boa razão para isso, mas certamente é confuso à primeira vista :-)
==
é aplicado.