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

还是不理解

老师,既然Foo是Class的实例对象,c1、c2也是Class的实例对象,但为什么Foo和c1、c2不相等呢?它们既然都是Class的实例对象,应该是同一类型,是可以比较的呀,但为什么不能比较呢

正在回答

6 回答

你拿类名去和一个对象比较?

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

五十阳 提问者

那老师说的这个类名是Class的实例对象,而c1也是Class的实例对象
2017-06-01 回复 有任何疑惑可以回复我~
#2

五十阳 提问者

2017-06-16 回复 有任何疑惑可以回复我~

你可以通过instansof看看呗,肯定都是同一类型啊,只是实例化方式不同而已.

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

五十阳 提问者

若是同一类型,那最起码能通过编译吧,但是比较时编译都不能通过,会报错例如:Foo.equals(c1)或者Foo==c1都会报错,而必须要用Class.forName(Foo的全路径)这样才能比较
2017-06-01 回复 有任何疑惑可以回复我~

c1和c2指向同一地址肯定想等啊,你自己去看看父类object类的equals方法吧;要比较就要重写hascode和equals方法;实例化得对象不是地址是什么?你自己直接输出实例化的对象看看,能比较内容的都是重父类的equals方法的。还不懂就去看看api上面有具体的代码,你自己就能看到它是怎么比较实现的。


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

五十阳 提问者

我的意思是foo、c1、c2都是Class的实例对象,但好像foo和c1还有c2根本就不是同一类型
2017-06-01 回复 有任何疑惑可以回复我~

因为每一个实例化对象都对应着不同的内存空间,所以说他们不相等;我们可以通过重写hascode和tostring方法去实现同一类型的比较。


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

五十阳 提问者

但是c1、c2就相等呀,而且用equals比较的是内容呀,不是引用对象首地址呀
2017-06-01 回复 有任何疑惑可以回复我~

行,希望能看懂吧

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

我也是,多看几遍吧.

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

举报

0/150
提交
取消
反射——Java高级开发必须懂的
  • 参与学习       151467    人
  • 解答问题       335    个

反射,Java高级开发必须要懂的知识点,学好Java高级课程的基础

进入课程

还是不理解

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