代码如下,因为不会载入只好手敲打,不好意思哈,如果有格式有点小问题请见谅哦(新人,分也比较少的说......)控制台输出结果,两个对象的内存地址是一样的,但是两个对象之间"=="是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;    }
}

解决方案 »

  1.   

    ==比较的不是根据hashcode来的吧!!
    比的是对象是不是一个对象!1
      

  2.   

    内存地址是不一样的。这和hashcode没关系。
      

  3.   

    内存地址应该就是根据hashCode来分配的吧
    ==是该对象的内存地址比较啊;
      

  4.   


    我觉得 他是根据内存来的!但那比较一定相等吗?
    他可能还有别的因素 确定内存地址啊!也就是说 hashcode只是部分!!
      

  5.   

    JAVA的字符串有些特殊,例如"aa"这个在静态池中分配,当你在引用"aa"的时候,其实你取到的还是对象池中原来的"aa"的对象,在你的代码中,两个"aa"的指向应该是内存中的同一片区域,所以他们的hashCode是相同的,而你又把Student的hashCode方法重写了,根据你的计算,name的哈西口德的值是一样的,而age也是一样,自然hashCode也一样,如果你不重写hashCode的话,在输出hashCode可以看出他们分配的堆内存是不样滴
      

  6.   

    您这hashcode都return 7*name.hashCode()+13*age; ,怎么可能是地址?
    其实Object.hashcode()的实现才和地址有关,但是被您override了:)
      

  7.   

    嗯,谢谢大家,了解了,
    Syso打印出的是对象的包+hashCode,
    对于没有覆盖hashCode的对象,打印出的是该对象的内存地址。