欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一件关于Integer有意思的事情

程序员文章站 2024-03-17 20:30:10
...

下面是一个关于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的直接赋值是调用了Integer类的静态方法 valueOf(),下面我们看一下这个方法都做了什么。

一件关于Integer有意思的事情

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

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

一件关于Integer有意思的事情

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

相关标签: java 面试