이 코드가 있습니다.
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를 생성 하지 않는다는 점을 감안할 때 유효한 질문입니다 ! 그것에 대한 좋은 이유가 있지만 첫눈에 확실히 혼란 스러워요 :-)
==
적용 방식과 는 상당히 다릅니다 .