java中为什么new的对象和申明对象相等

J2EE 码拜 9年前 (2015-11-26) 1070次浏览
public void t1(){
Integer n1 = 10;
Integer n2 = new Integer(10);
int n3 = 10;
System.out.println(n1==n3);//true,①
System.out.println(n1==n2);//false,②
System.out.println(n2==n3);//true,③
}
对于①本人理解的是jdk1.5后拆箱和装箱步骤。
对于②本人理解的是Integer n1 = 10;对象是在栈空间,而n2申明的对象指向的是堆空间。故而不等
对于③本人就不懂了。
麻烦帮看看本人对前两步的理解,以及③为什么为true
解决方案:20分
n1是在常量池中,所以和堆中的n2不是同一个对象。而int和Integer比,都会被拆箱为int,比的是值而不是地址。所以一三为真二为假…………
解决方案:5分
地址的比较涉及到内存实现方法。
一般来说除非你计划设计语言,不然对于写应用逻辑,知道细节的内存实现方法并没什么用处。
解决方案:10分
对象比较还是用.equals吧…
==比较地址但是遇到包装类的时候又会自动拆箱感觉绕的人很不爽
而且这样n1==n3, n2==n3结果原本应该是n1==n3==n2的变成了n1!=n2,看完让人觉得很奇葩…
解决方案:10分
你前两句解释也没什么问题,3也是一样的,对象和基本类型比较,就将n2拆箱,拆箱之后就相等了。总之就是对象与基本类型比较,就将对象拆箱。
解决方案:5分
int  不能算是对象   integer是对象   new  出来的能一样么  或你可以打印出n1 和 n2  你会发现是不一样的

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java中为什么new的对象和申明对象相等
喜欢 (0)
[1034331897@qq.com]
分享 (0)