Mam ten kod:
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
}
}
Mój problem polega na tym, że nie rozumiem, dlaczego Test 3 działa dobrze (drukuje false
i nie produkuje NullPointerException
), tymczasem Test 4 wyrzuca plik NullPointerException
. Jak widać w testach 1 i 2 , null
i modifiedItems.get("item1")
są równe i null
.
Zachowanie jest takie samo w Javie 7 i 8.
null
do tej samej funkcji nie generują NPE! Jest ku temu dobry powód, ale na pierwszy rzut oka jest to z pewnością mylące :-)
==
stosowania.