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);
}
本文详细介绍了Java中==运算符和equals()方法在比较对象时的不同。==主要比较对象的内存地址,而equals()默认首先比较地址,然后对比成员变量。在Integer类型中,由于存在常量池,对于[-128, 127]范围内的值会复用对象,因此i3和i4的equals()比较结果为false,因为它们指向不同的堆内存地址。

被折叠的 条评论
为什么被折叠?



