最近老是在==和equals上出问题,看了一点资料,==在运算时比较的是内存的地址,对于类来说,单例模式时结果是true。对于==,如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等;
如果作用于引用类型的变量,则比较的是所指向的对象的地址。
关于拆箱装箱有个问题需要注意,valueof()函数在初始化时会维护一个缓存池,范围是l >= -128 && l <= 127,所以Integer i03=Integer.valueOf(59); Integer i04=new Integer(59);比较的值是false
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}