一件关于Integer有意思的事情

tech2025-05-31  5

下面是一个关于Integer比较有意思的现象:

public class IntegerTest { public static void main(String[] args) { Integer num1 = 1000, num2 = 1000; System.out.println(num1 == num2);//false num1 = 100; num2 = 100; System.out.println(num1 == num2);//true } }

为了了解这个现象的真相,首先看一下字节码层面:

通过字节码知道了Integer的直接赋值是调用了Integer类的静态方法 valueOf(),下面我们看一下这个方法都做了什么。

如果i大于IntegerCache.low并且i小于IntegerCache.high,那么就返回IntegerCache.cache[i + (-IntegerCache.low)],否则就返回一个值为new Integer(i)。

再看一下IntegerCache是什么?是Integer的一个内部私有类,仔细读会发现这里做了个缓存,缓存了-128~127之间的所有整数。

也就是如果Integer直接赋值,赋值为-128~127之间的整数,那么是直接从Integer的内部类的缓存中直接读取,然后返回,所以指向的为同一个对象,所以==的判断为true。

最新回复(0)