为什么在Java中将Object与数字文字进行比较?

时间:2015-12-07 08:07:03

标签: java autoboxing

我想知道为什么下面的代码片段在没有警告的情况下在Java 7中编译

Map<String, Object> map = new HashMap<>();
map.put("key", 0);
if (map.get("key") != 0) {
    System.out.println("what?!");
}

研究生成的字节码表明编译器将0语句中使用的if加载到Integer的实例(使用Integer.valueOf(0)),然后将其与get使用引用相等的结果。令人惊讶的是,代码没有打印任何东西,因为小整数的实例被重用。但是,如果在两种情况下用0替换4096,程序会打印出什么?!&#34;

但我的问题不是为什么这段代码有效或者没有 - 编写这样的代码是一种冒犯。我宁愿期望编译器完全拒绝它!为什么不呢?

0 个答案:

没有答案