首先说两点小错误
1,Student类不需要写main函数,
2,你注释部分的equals代码有误 首先要判读if (obj instanceof Student) {Student other = (Student) obj} else return flase,
return this.name==s.name&&this.age==s.age; 这句有错误 不能用等号,this.name.equals(other.name)
对于你提出的问题一楼回答的很完美,我稍作补充,说明一下地址和hashCode的区别,纯属个人理解
只要你new了个对象,就会在内存中开辟一个空间,这个空间的地址就是一楼说的地址.内存地址
当你new了一个hashSet集合同意也在内存中开辟了一个空间,这个空间有点大.因为大所以要在这个空间上再次划分一下,划分n份,每份地址就是用hashCode表示,.这个地址中可以存放好多个对象,并不是一个hashCode就存一个对象.
每当存放一个对象进集合的时候首先计算出hashCode地址,然后放在集合空间里对应的位置上,再次存放的时候再次计算hashCode值,
如果出现相同,这分空间里判断对象的equals是否相同,比如学生就判断名字是否相同.
大体就是这样的,想更深理解 可以看看张孝祥老师的java高新技术 ,在讲<了解和入门注解的应用>中@override知识点的时候有讲到 |