对象比较小问题

suojunqi 2009-11-04 03:55:44
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.println(n1 == n2); //false
System.out.println(new Integer(47) == new Integer(47)); //false
System.out.println(n1.equals(n2)); //true

我们知道第一个是因为比较的是引用,所以false,最后一个比较的是对象内容所以true,那我第二个比较的不是引用吧??
比较是什么呢?


...全文
108 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangqibing0626 2009-11-04
  • 打赏
  • 举报
回复
前两个是比较对象的内存地址,后一个是比较对象的内容!
soli11722984 2009-11-04
  • 打赏
  • 举报
回复
ER。。。。。看错题了
忽略10楼
soli11722984 2009-11-04
  • 打赏
  • 举报
回复
第一个 比较值内容(Integer重写了)
第二个 比较hashcode
第三个 比较值内容
haojia0716 2009-11-04
  • 打赏
  • 举报
回复
第二个 比较的不是引用 是地址

第一个 比较的也不是引用 是引用指向的地址
Net_Flasher 2009-11-04
  • 打赏
  • 举报
回复
构造函数返回的就是引用嘛!new Integer(47) , new Integer(47)分别会返回两个引用!
x360995630 2009-11-04
  • 打赏
  • 举报
回复
同上 up
skyworld2288 2009-11-04
  • 打赏
  • 举报
回复
楼主第二个也正是引用,动态创建的两块内存块来存储47,
由于对象引用比较比的正式两个引用所指向的内存块,
内存块不一样,结果那肯定是不等的。
xiaohongboabcd 2009-11-04
  • 打赏
  • 举报
回复
==与equals是有区别的,楼主上面的理解有点问题,在java中所有的对象都是在堆中,==比较的是这两个对象的内存地址是否一样(就像世界上没有完全相同的两片树叶,所以是false)equals是object类的方法,equals比较本来和==是一样的,但是Integer类中重写了这个方法,比较的是这两个对象的值,而不是在内存中的地址,你可以去看看API中object类的equals方法和Integer中的equals方法
java_2008_4_4 2009-11-04
  • 打赏
  • 举报
回复
第一个更明确的应该比较的变量中所存储的对象的内存地址。
至于第二个以前还真没考虑过,不过想想应该也是比较的两个对象的内存地址
feng_jyie 2009-11-04
  • 打赏
  • 举报
回复
你认为呢?
wxzyydy 2009-11-04
  • 打赏
  • 举报
回复
第二个比较的就是引用啊,第一个是用引用名来比较而已
justinavril 2009-11-04
  • 打赏
  • 举报
回复
以前都是人问String,现在都在问Integer,估计下次该轮到Long了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧