私はこのコードを持っています:
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
}
}
私の問題は、テスト4がをスローするのに対して、テスト3が正常に機能する(印刷さfalse
れて生成されないNullPointerException
)理由が理解できないことです。テスト1と2でわかるように、とはとです。NullPointerException
null
modifiedItems.get("item1")
null
Java 7と8の動作は同じです。
null
同じ関数にリテラルを渡す上記の2行だけではNPEが生成されないので、これは有効な質問です。それには十分な理由がありますが、一見すると確かに混乱します:-)