У мене є цей код:
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
}
}
Моя проблема полягає в тому, що я не розумію, чому тест 3 працює добре (він друкує false
і не видає NullPointerException
), тим часом тест 4 кидає NullPointerException
. Як ви можете бачити в тестах 1 і 2 , null
і modifiedItems.get("item1")
рівні і null
.
Поведінка однакова у Java 7 та 8.
null
на ту ж функцію не генерують NPE! Для цього є вагомі причини, але це, звичайно, незрозуміле на перший погляд :-)
==
застосування.