可能是重复问题:
奇怪的Java装箱
最近我看到了一个Java代码示例,如下:
Integer a = 1000, b = 1000;
System.out.println(a == b); // false
Integer c = 100, d = 100;
System.out.println(c == d); // true
我有点困惑。我理解第一个案例为什么结果是 "false" - 这是因为 Integer 是引用类型,而 "a" 和 "b" 的引用不同。
但是为什么第二个案例的结果是 "true" 呢?
我听说过 JVM 为了某些优化目的缓存-128到127之间的 int 值的对象。这样,"c" 和 "d" 的引用就相同了。
有人能给我更多关于这种行为的信息吗?我想了解这种优化的目的。在什么情况下会提高性能等。有关此问题的研究参考将非常好。
Integer a = 1; Integer b = new Integer(1); System.out.println(a == b); // 输出 false
。 - ccpizza