Ich habe diesen 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
}
}
Mein Problem ist, dass ich nicht verstehe, warum Test 3 gut funktioniert (es druckt false
und produziert nicht NullPointerException
), während Test 4 a wirft NullPointerException
. Wie Sie in den Tests 1 und 2 sehen können , sind null
und modifiedItems.get("item1")
gleich und null
.
Das Verhalten ist in Java 7 und 8 dasselbe.
null
an dieselbe Funktion keine NPE erzeugen! Es gibt einen guten Grund dafür, aber es ist auf den ersten Blick sicherlich verwirrend :-)
==
als die Anwendung.