J'ai ce code:
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
}
}
Mon problème est que je ne comprends pas pourquoi le test 3 fonctionne correctement (il imprime false
et ne produit pas NullPointerException
) pendant que le test 4 lance un fichier NullPointerException
. Comme vous pouvez le voir dans les tests 1 et 2 , null
et modifiedItems.get("item1")
sont égaux à et null
.
Le comportement est le même dans Java 7 et 8.
null
à la même fonction ne génère pas de NPE! Il y a une bonne raison à cela, mais c'est certainement déroutant à première vue :-)
==
on l'applique.