hashCode请教

lacus87 2010-04-08 08:37:52
代码如下,因为不会载入只好手敲打,不好意思哈,如果有格式有点小问题请见谅哦(新人,分也比较少的说......)

控制台输出结果,两个对象的内存地址是一样的,但是两个对象之间"=="是false,希望有高手指点......


public class HashCodeTest{
public static void main(String[] args){
Student stu1=new Student("aa",12);
Student stu2=new Student("aa",12);

//打印两个对象的内存地址
System.out.println(stu1);
System.out.println(stu2);

//打印两个对象内存地址的比较
System.out.println(stu1==stu2);
}
}
class Student{
private String name;
private int age;
public Student(String name;int age){
this.name=name;
this.age=age;
}
public int hashCode(){

//这里随便写,只要是按属性生成的即可
return 7*name.hashCode()+13*age;

}
}
...全文
91 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lacus87 2010-04-09
  • 打赏
  • 举报
回复
嗯,谢谢大家,了解了,
Syso打印出的是对象的包+hashCode,
对于没有覆盖hashCode的对象,打印出的是该对象的内存地址。
ZangXT 2010-04-08
  • 打赏
  • 举报
回复
从哪里看出两个对象内存地址一样的?
michaellufhl 2010-04-08
  • 打赏
  • 举报
回复
您这hashcode都
return 7*name.hashCode()+13*age; 
,怎么可能是地址?
其实Object.hashcode()的实现才和地址有关,但是被您override了:)
wind1373290 2010-04-08
  • 打赏
  • 举报
回复
JAVA的字符串有些特殊,例如"aa"这个在静态池中分配,当你在引用"aa"的时候,其实你取到的还是对象池中原来的"aa"的对象,在你的代码中,两个"aa"的指向应该是内存中的同一片区域,所以他们的hashCode是相同的,而你又把Student的hashCode方法重写了,根据你的计算,name的哈西口德的值是一样的,而age也是一样,自然hashCode也一样,如果你不重写hashCode的话,在输出hashCode可以看出他们分配的堆内存是不样滴
hjjk123 2010-04-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lacus87 的回复:]
内存地址应该就是根据hashCode来分配的吧
==是该对象的内存地址比较啊;
[/Quote]

我觉得 他是根据内存来的!但那比较一定相等吗?
他可能还有别的因素 确定内存地址啊!也就是说 hashcode只是部分!!
lacus87 2010-04-08
  • 打赏
  • 举报
回复
内存地址应该就是根据hashCode来分配的吧
==是该对象的内存地址比较啊;
michaellufhl 2010-04-08
  • 打赏
  • 举报
回复
内存地址是不一样的。这和hashcode没关系。
hjjk123 2010-04-08
  • 打赏
  • 举报
回复
==比较的不是根据hashcode来的吧!!
比的是对象是不是一个对象!1

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧