- == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象
- equals 用来比较的是两个对象的内容是否相等
注意:
-
一个是-128<=
x<=127的整数,将会直接缓存在IntegerCache中,当赋值在这个区间的时候,不会创建新的Integer对象,而是从缓存中获取已经创建好的Integer对象 -
二是当大于这个范围的时候,直接new Integer来创建Integer对象
验证
Integer i1 = 127; //直接赋值的时候会进行自动的装箱
Integer i2 = 127
System.out.println(i1 == i2); //true
System.out.println(i1.equals(i2)); //true
//i1、i2是自动装箱产生的对象,其值都是127,127正好在-128<=i7<=127
//这个范围内的,那么会去IntegerCache中取,该对象应该是一个对象,在堆中的
//地址应该是一样的,所以在判断两个对象是不是==的时候,会输出相等。
Integer i3 = 129; //直接赋值的时候会进行自动的装箱
Integer i4 = 129;
System.out.println(i3 == i4); //false
System.out.println(i3.equals(i4)); //true
//i3和i4是自动装箱产生的Integer的对象,但是其大小超过了范围:-128<=A <=127,
//这里会直接自己创建该对象即:new Integer(128);显然这两个对象都是new出来,
//在堆中的地址值是不同的,所以二者不相等。