老师,既然hashcode是基于对象地址。那么在我们创建对象的时候,就不可能创建相同的对象。比如我们不可能创建两个引用名为huahua 的Cat类对象。既然不可能有相同的类对象,那么比较hashcode的意义在哪里?
登陆购买课程后可参与讨论,去登陆吧
同学你好,重写后的hashCode就不是地址值了,hashCode是对各个属性的值进行某种计算,如果hashCode不一样的话,就不用调用equals方法去比较了,两个对象的属性值肯定是不同的,如果一样的话,属性值有可能会不同,我们还有需要在去比较equals方法,如果equals比较结果为false,比较的两个对象是不同的,如果equals比较结果为true,比较的两个对象才是相同的。
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
也就是说,如果没有重写hashCode方法那返回的是另一个地址,重写之后返回的就是物理地址。在set进行add的时候自动调用hashCode方法,再通过底层根据重写之后的hashCode方法的返回值,定位到实际内存中的地址,如果那个地址有数据再调用equals比较,没数据就添加这个类到这个内存地址。是这样吗老师
同学你好,重写hashcode后,对象的地址是指对象在hash表中的位置,并不是物理地址。使用set调用add方法进行添加时,会自动调用hashCode方法,如果HashCode值相同,则调用equals进行比较。如果不同,则直接添加。
祝学习愉快~
变量名和对象不是同一个意思,对象是在堆中,局部变量是在栈中,如果是引用类型变量,是将对象的地址赋值给变量,可能出现两个变量指向同一个对象的情况。
请采纳!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
登录后可查看更多问答,登录/注册
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
8 2
25 4
162 1
40 3
66 1
在线咨询
领取优惠
免费试听
领取大纲
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星