Tôi có mã này:
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
}
}
Vấn đề của tôi là tôi không hiểu tại sao Test 3 hoạt động tốt (nó in false
và không sản xuất NullPointerException
) trong khi Test 4 ném a NullPointerException
. Như bạn có thể thấy trong các thử nghiệm 1 và 2 , null
và modifiedItems.get("item1")
bằng và null
.
Hành vi này giống nhau trong Java 7 và 8.
null
cùng một hàm sẽ không tạo ra NPE! Có một lý do chính đáng cho nó, nhưng nó chắc chắn gây nhầm lẫn ngay từ cái nhìn đầu tiên :-)
==
áp dụng.