A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高昌德 中级黑马   /  2014-11-6 18:01  /  1284 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Object obj1 = new Object();
Object obj2 = new Object();
1:System.out.println(obj1==obj2);
2:System.out.println(obj1.equals(obj5));         
Object obj3 = 223;
Object obj4 = 223;
3:System.out.println(obj3==obj4);
4:System.out.println(obj3.equals(obj4));

1和2:false false
3和4:false true
可不可以理解为obj1和obje2是两个对象,Object类型没有复写equals()方法,所以无论==还会equals()都为false;
obj3和obj4也是两个对象,但是Integer类型复写了equals()方法,所以==是false,equals()是true.
但obj3和obj4不是object类型的吗?难道赋值时自动装箱,还是多态的问题,父类引用指向子类对象?


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 jacoblx 于 2014-11-6 18:41 编辑

Object obj3 = 233;
1. 首先是自动装箱,由于obj3是个对象,所以233这个整型数据被自动装箱成Integer后付给了obj3,这里相当于Object obj3 = Integer.valueOf(233);
2. 然后等号左边是Object类型,右边是Integer类型,父类引用指向子类对象,所以是多态。
3. 所以很明了,obj3调用equals方法实际运行的是子类(Integer)中的equals方法。
额外多说一点
如果是
Object obj3 = 122;
Object obj4 = 122;
那么结果将是true,true
因为-128~127中的数据均以常量保存,如果初始化数据为这个范围,那么仅仅是新建了引用指向这些常量数据,数据的实际地址是一样的,也就是两个引用指向同一个对象。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
jacoblx 发表于 2014-11-6 18:35
Object obj3 = 233;
1. 首先是自动装箱,由于obj3是个对象,所以233这个整型数据被自动装箱成Integer后付 ...

表示同意,谢过,,,,大牛:lol
回复 使用道具 举报
高昌德 发表于 2014-11-6 19:35
表示同意,谢过,,,,大牛

:L我不是大牛,技术分还没你高呢怎么变成大牛了。。。。。。
回复 使用道具 举报
学习了,你的技术分好高哟
回复 使用道具 举报
二楼的不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马