先来一段代码:
public static void main(String[] args){
Integer i=100;
Integer x=100;
System.out.println(i.equals(x));
i=200;
x=200;
System.out.println(i.equals(x));
}
这段代码输出的是什么呢?true,false。那么为什么呢?到底发生了什么呢?我们来分析一下:
jdk为了实现内存高效利用,使用了一个数据对象缓冲池,在这个池中存放了-128到127值的所有唯一的数据对象。Integer i=100;这句话就是把i指向了数据池中值为100的那个对象。同样x也指向了同一个对象。因此i和x指向了同一个对象。同样的原因也解释了第二次输出由于自动装箱输出了两个不同的对象。这边是jdk的实现方式。
总结:
1、站在巨人肩膀上。
2、学习知识基础知识非常重要。