0.==和equals区别
1.基本类型只有==方法,比较的是值。只有对象才有equals方法
2.==比较的是对象地址
3.Object的equals方法是直接返回==结果,大部分被重写了,比较值
4.包装类型与基本类型==比较会自动拆箱
1.包装类型与基本类型转换
// 自动装箱,底层调用Integer.valueOf()实现
Integer i = 6;
// 自动拆箱,底层调用intValue()实现
int i = new Integer(6)
注意点:
1. Integer的value是用final修饰的,每次赋值改变都是新的对象,可用System.identityHashCode()验证
2. Integer如果用new新建,是在堆上开辟空间,引用传递,==一定不等,如果是用=创建,会调用valueOf方法,而该方法做了一个缓存,默认区间是【-128,127】(右区间可传值改变),在这个范围内==相等,超出再new。Byte,Short,Long同样做了【-128,127】的缓存
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
public int intValue() {
return value;
}