Saya memiliki kode ini:
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
}
}
Masalah saya adalah saya tidak mengerti mengapa Tes 3 berfungsi dengan baik (mencetak false
dan tidak menghasilkan NullPointerException
) sementara Tes 4 melempar NullPointerException
. Seperti yang Anda lihat dalam tes 1 dan 2 , null
dan modifiedItems.get("item1")
adalah sama dengan dan null
.
Perilakunya sama di Java 7 dan 8.
null
ke fungsi yang sama tidak menghasilkan NPE! Ada alasan bagus untuk itu, tapi itu pasti membingungkan pada pandangan pertama :-)
==
penerapannya.