Ho questo codice:
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
}
}
Il mio problema è che non capisco perché il Test 3 funziona bene (stampa false
e non produce NullPointerException
) mentre il Test 4 lancia un file NullPointerException
. Come puoi vedere nei test 1 e 2 , null
e modifiedItems.get("item1")
sono uguali e null
.
Il comportamento è lo stesso in Java 7 e 8.
null
alla stessa funzione non genera un NPE! C'è una buona ragione, ma a prima vista è certamente
==
viene applicata.