Integer里面默认的缓存数字是-128-127,
1、Integer与Integer相互比较,数据在-128-127范围内,就会从缓存中拿去数据,使用==比较就相等;
如果不在这个范围,就会直接新创建一个Integer对象,使用 == 判断的是两个内存的应用地址,所以自然不相等。【堆:存放所有new出来的对象。】
2、Integer和int类型相比,在jdk1.5,会自动拆箱,然后==比较栈内存中的数据,所以没有不相等的情况
public class Main {
public static void main(String[] args) {
Integer i1 = new Integer(1);//堆
Integer i2 = new Integer(1);//堆
Integer i3 = 1;//常量池,在-128~127的范围内,被缓存在常量池中
Integer i4 = 1;//常量池,在-128~127的范围内,被缓存在常量池中
System.out.println(i1 == i2);//false
System.out.println(i2 == i3);//false
System.out.println(i3 == i4);//true
Integer i5 = new Integer(150);//堆;
Integer i6 = new Integer(150);//堆;
Integer i7 = 150;//堆,超出-128~127的范围,