为了账号安全,请及时绑定邮箱和手机立即绑定

equals使用问题

为什么我的size的属性值不同而使用equals时,输出的结果是“两个对象相同”呢?

http://img1.sycdn.imooc.com//59a400190001271210200556.jpg

http://img1.sycdn.imooc.com//59a4001a000140d510970603.jpg

http://img1.sycdn.imooc.com//59a4001b00019e7610970602.jpg


正在回答

3 回答

那当然也不同了,虽然Iphone1类和Iphone2类的属性相同,值也相同,但父类Iphone1下有一个隐式的equals方法,比较的是对象的引用,而Iphone2类中你重写了equals方法,比较的是对象的类型,这两个equals方法的类型、名称虽然相同,但方法内的代码不同,所以无论属性如何,对象iphone和对象iphone2的类型都是不同的。所以,要在保证对象方法完全一样的前提下,去比较属性名和属性值是否相同。http://img1.sycdn.imooc.com//59a4d3d10001c97c05190419.jpg

1 回复 有任何疑惑可以回复我~
#1

zxj2333 提问者

非常感谢!
2017-08-29 回复 有任何疑惑可以回复我~

不能在类中赋值,要再实例化对象后用 iphone.size=6 赋值

0 回复 有任何疑惑可以回复我~
#1

慕粉3631469

子类Iphone2的equals方法是对Object类的重写,和Iphone1没关系。你实例化对象iphone和对象iphone2的时候new的都是Iphone2类,所以Iphone1中的属性和其值都没用上。实际上对象iphone和对象iphone2是同类型同属性值的
2017-08-28 回复 有任何疑惑可以回复我~
#2

zxj2333 提问者 回复 慕粉3631469

我是重写equals方法比较两个对象的属性是否相同。如果创建Iphone1和Iphone2两个对象的话,就是两个不同的地址的。
2017-08-28 回复 有任何疑惑可以回复我~
#3

慕粉3631469 回复 zxj2333 提问者

地址的确是不同的,但属性值是一样的,因为你没有单独给两个对象的属性赋不同的值,两个对象用的都是Iphone2类下初始的值
2017-08-28 回复 有任何疑惑可以回复我~
#4

zxj2333 提问者 回复 慕粉3631469

你是说这样吗? Iphone1 iphone = new Iphone1(); Iphone2 iphone2 = new Iphone2(); 但是这样在属性值相同的时候,结果是“两个对象不同”
2017-08-28 回复 有任何疑惑可以回复我~
查看1条回复

Iphone1.java保存了吗

0 回复 有任何疑惑可以回复我~
#1

慕粉3631469

实例化对象的时候用的都是Iphone2类
2017-08-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530652    人
  • 解答问题       6091    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

equals使用问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信