java中==和equals()的区别
==
==是直接比较的两个对象的堆内存地址,如果相等,则说明这两个引用实际是指向同一个对象地址的。(一般用于基本类型的判断)
equals
而默认生成的equals首先是判断两个对象的地址是否相等,若相等则返回true,若不相等再进行成员变量判断,若有一个成员变量不等则返回false,若全部成员变量都相等时,才返回true。(一般用于对象的判断)
笔试面试常考题目:
输出结果:
因为 Integer 在常量池中的存储范围为[-128,127],127在这范围内,因此是直接存储于常量池的,而128不在这范围内,所以会在堆内存中创建一个新的对象来保存这个值,所以i3和i4分别指向了两个不同的对象地址,故而导致了不相等。
public static Integer valueOf(int i) {
if(i >= -128 && i <= IntegerCache.high)
return IntegerCache.cache[i + 128];
else
return new Integer(i);
}