Integer i01 = 59;涉及到自动装箱,i01就是Integer 的引用
int i02 = 59;i02本身就是59
Integer i03 =Integer . value0f(59);把int 型转换成Integer,装包,在-128到127范围,返回对引用,否则在堆中重新new 一个。
Integer i04 = new Integer(59);是在堆中新开辟的空间
i01==i02;等号一边存在基本类型所以编译器后会把另一边的Integer对象拆箱成int型true
好了,到了这里,你有没有想到这样一个问题:如果是Integer i01=59;Integer i02=59;然后System.out.println(i01== i02)的结果是?true
在-128~127内,引用直接放入栈,指向一个数,所以相等
如果是Integer i01=300;Integer i02=300;然后System.out.println(i01== i02)的结果是?false
不在-128~127内,虚拟机从新开辟,两个引用地址就不同
i01==i03,ture
i03(范围内,栈直接引用)i04(栈新开辟引用),false
i02(整形) i04(解包),比的是值