案例:
//情景1
Integer c = 128;
Integer d = 128;
System.out.println(c == d);//false
//情景2
Integer a = 1;
Integer b = 1;
System.out.println(a == b);//true。b.intValue()
//情景3
Integer e = new Integer(1);
Integer f = new Integer(1);
System.out.println(e == f);//false
//情景4
Integer e = new Integer(1);
Integer f = new Integer(1);
System.out.println(e.equals(f));//true
分析
- 案例一和案例二
案例一和案例二都是直接赋值,就是使用了java的自动装箱,实际是调用了valueOf(int i)方法
public static Integer valueOf(int i) {
//-128 到 127 从缓存中获取
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
可以看到integer中维护了一份缓存,-128到127是取的缓存中的对象,所以案例二的对象实际是同一个,所以是true
- 案例三
new 了两个不同对象,==比较地址值自然不相等