ฉันมีรหัสนี้:
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
}
}
ปัญหาของฉันคือฉันไม่เข้าใจว่าทำไมTest 3 ถึงทำงานได้ดี (มันพิมพ์ออกมาfalse
และไม่ได้ผลิตNullPointerException
) ในขณะที่Test 4พ่นไฟล์NullPointerException
. ในขณะที่คุณสามารถมองเห็นในการทดสอบ1และ2 , null
และเท่าเทียมกันและmodifiedItems.get("item1")
null
ลักษณะการทำงานจะเหมือนกันใน Java 7 และ 8
null
ไปยังฟังก์ชันเดียวกันไม่ได้สร้าง NPE! มันมีเหตุผลที่ดี แต่ก็ทำให้สับสนตั้งแต่แรกเห็น :-)
==
การนำไปใช้