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
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,看完让人觉得很奇葩…
==比较地址但是遇到包装类的时候又会自动拆箱感觉绕的人很不爽
而且这样n1==n3, n2==n3结果原本应该是n1==n3==n2的变成了n1!=n2,看完让人觉得很奇葩…
解决方案:10分
你前两句解释也没什么问题,3也是一样的,对象和基本类型比较,就将n2拆箱,拆箱之后就相等了。总之就是对象与基本类型比较,就将对象拆箱。
解决方案:5分
int 不能算是对象 integer是对象 new 出来的能一样么 或你可以打印出n1 和 n2 你会发现是不一样的