自动装箱相当可怕。虽然我完全理解 和 之间的区别,==
但.equals
我不禁要让我的以下错误彻底消失:
final List<Integer> foo = Arrays.asList(1, 1000);
final List<Integer> bar = Arrays.asList(1, 1000);
System.out.println(foo.get(0) == bar.get(0));
System.out.println(foo.get(1) == bar.get(1));
那打印
true
false
他们为什么这样做?它与缓存的整数有关,但如果是这种情况,他们为什么不缓存程序使用的所有整数呢?或者为什么 JVM 不总是自动拆箱到原始?
打印 false false 或 true true 会更好。
编辑
我不同意旧代码的破坏。通过foo.get(0) == bar.get(0)
return true 你已经破坏了代码。
这不能通过在字节码中用 int 替换 Integer 来在编译器级别解决(只要它从未被分配为 null)