请教一个问题,关于java的小问题

public static void main(String[] args) {
Integer a = new Integer(3);
Integer b = 3;

int c = 3;
System.out.println(a == b);

System.out.println(a == c);

}
结果是什么,为什么? 能不能画个内存图清楚点,非常感谢!

==比较的是对象的内存地址,a,b分别是new Integer(3)和3这两个对象的引用,他们存放在内存中的两个地方,所以a==b是FALSE,
“==”运用在基本数据类型的时候,通过比较它们实际的值来判断是否相同 ,a与c比较时,由于c是基本类型,java会将对象a拆箱成 int a 所以a==c是true.
如果c的定义是Integer c=3 ,由于java有常量池的概念, 在-128到127之间的数值,b==c结果是true,在这个范围之外,b==c的结果就是FALSE了。
至于内存图,希望楼下有更好的答案!!!!!

== 这个比较符比较的是地址。如果两个对象的地址相等则返回true。
System.out.println(a == b); a对象是new出来的和b也是一个对象所以地址肯定不相等,返回 false
System.out.println(a == c); 因为int有这样的特性,例如Integer类型,有这样的特性。如果小于127的值,是从cache中获取的,他们的内存地址是相等的,超过的话是在堆上分配,地址不同。则返回true,使用的cache

第一个是false,第二个是true吧!
(1)a=new Integer(3),new出来的对象存储在堆中,所以a指向堆中的内存地址。

(2)b=3.因为b是Integer类型的,会自动装箱,也会在堆中创建对象(new操作),所以内存地址和a肯定不一样。

(3)a == c:==比较的是a与c存储的值的大小,都是3,所以为true

false
true
首先你要明白Integer和int比较的时候会涉及到拆装箱,就是会将Integer拆箱为int这样两个int原声数据类型用==比较的是值
而两个Integer比较的是内存地址所以a和b是不想等的,而a和c是相等的

a new Integer 与 b Integer 不会相等。因为不会经历拆箱过程,new出来的对象存放在堆,而非new的Integer常量则在常量池,他们的内存地址不一样,所以为false。

无论是a与c 还是b与c Integer都会自动拆箱为int,所以为true