Java中“100=100”为true,而"1000=1000"为false?

1. 自动装箱与缓存机制

在 Java 中,整数值在 -128 到 127 之间时,Integer 类会缓存这些值。即在这个范围内的整数会共享同一个对象实例。因此,当两个整数在该范围内进行比较时(如 100 == 100),返回的是 true,因为它们指向的是相同的缓存对象。

2. 大于 127 的整数不共享同一实例

超过 127 的整数不在缓存范围内,因此每次装箱都会创建一个新的 Integer 对象。所以对于 “1000=1000”,两个 Integer 对象的地址不同,因此 == 比较返回 false。

示例代码

以下代码演示了 Integer 的缓存机制:

1
2
3
4
5
6
7
8
复制代码
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true

Integer c = 1000;
Integer d = 1000;
System.out.println(c == d); // false

总结

Integer 缓存范围:-128 到 127。
在这个范围内,比较两个相等的 Integer 返回 true。
超出范围时,装箱生成的新对象实例地址不同,比较返回 false。
因此,比较整数时,推荐使用 equals() 方法而非 ==。