Bu koda sahibim:
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
}
}
Benim sorunum, Test 3'ün neden iyi çalıştığını (yazdırıyor false
ve üretmiyor NullPointerException
) bu arada Test 4'ün bir NullPointerException
. Eğer testlerde görebileceğiniz gibi 1 ve 2 , null
ve modifiedItems.get("item1")
eşittir ve vardır null
.
Davranış, Java 7 ve 8'de aynıdır.
null
aynı işleve değil bir NPE üretmek! Bunun iyi bir nedeni var, ancak ilk bakışta kesinlikle kafa karıştırıcı :-)
==
uygulandığından oldukça farklı bir şey .