У меня есть такой код:
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! Для этого есть веская причина, но это определенно сбивает с толку на первый взгляд :-)
==
применяется.