一件关于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类的静态方法 valueOf(),下面我们看一下这个方法都做了什么。
如果i大于IntegerCache.low并且i小于IntegerCache.high,那么就返回IntegerCache.cache[i + (-IntegerCache.low)],否则就返回一个值为new Integer(i)。
再看一下IntegerCache是什么?是Integer的一个内部私有类,仔细读会发现这里做了个缓存,缓存了-128~127之间的所有整数。
也就是如果Integer直接赋值,赋值为-128~127之间的整数,那么是直接从Integer的内部类的缓存中直接读取,然后返回,所以指向的为同一个对象,所以==的判断为true。
上一篇: 使用Navicat Premium 12创建MySql存储过程
下一篇: BUGKU上几道有意思的题