Java里对象equals方法

如果我有个student类,里面有两个属性id和name,如果我重写equals和hashcode方法,equals里判断name是否相等,hashcode里判断id。现在新建对象stu1(1,“aaa”)stu2(1,“aaa”) stu3(2,“aaa”)我想问下,现在这三个对象是否可以说是相等的?还有一个问题,既然说“equals比较出来的相等的话,hashcode一定相等”,那么stu1和stu3又怎么解释呢?现在有点晕了

推荐你个网址,进去看看就明白了。

http://www.iteye.com/topic/257191

对象是否相等应该和你重写equals和hashcode方法是没有关系的吧?就是你把id和name搞成一样的,两个new出来的对象也不可能相等啊

楼上可能没表达清楚,楼上所说的不可能相等应该是不可能==号比较为true

你把equals当成一个普通方法就行,因为是你重写的,规则你定,你说怎么样相等就怎么相等,你甚至可以直接return true;
而Object总父类有它自己的规则,认为==(内存地址一样,也就是同一个对象),才认为是相等

个人感觉 equals相等的两个对象,hashCode()也相等。这句话前提
1:是没有重写equals和hashCode方法。
2:在各种基于hashtable的集合中判断对象是不是相等时。因为看源码这类集合判断是否相等是if(this.hashCode()==that(具体忘了指另一个对象).hashCode()&&equals两个对象。而&&有短路作用。所以hashCode要是不一样就没有必要判断equals了。

name通过hashcode计算出来的,也就是1的hashcode不等于2的hashcode。

new 出来的 不相等

http://lelglin.iteye.com/blog/1826152

new出来的不相等,因为指向的不是一个内存空间,

你这样重写违背了jdk中关于equal()hashcode()方法的原则,下面给出jdk1.6中关于equal的定义

equals

public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。

equals 方法在非空对象引用上实现相等关系:

  • 自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
  • 对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
  • 传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
  • 一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。

对于任何非空引用值 x,x.equals(null) 都应返回 false。
Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。

**注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
**

参数:

  • obj - 要与之比较的引用对象。

返回:

  • 如果此对象与 obj 参数相同,则返回 true;否则返回 false。

重写equals和hashcode方法,希望下面链接对你有帮助http://dashen100.com/question/94/answer/1004