36_Object类之equals方法
2012-05-16 16:27
399 查看
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。
例子程序:
/**
* 故事背景:你老婆在宠物店看到一个小狗想买,问了多少钱,老板说5千, 老婆拿的钱不够
* ,然后回家去取,取回钱,再来看,小狗卖掉了。。 老板又说旁边这条小狗也跟之前的一样,颜色、品种,重量。
*当时,你也跟着去买了。你为了哄老婆开心,你 怎么让她觉得跟之前的小狗是一样的呢?
*/
public class Test { public static void main(String[] args){ Dog d1 = new Dog("1号小狗","white","比熊",3); Dog d2 = new Dog("2号小狗","white","比熊",3); System.out.println(d1==d2); // false System.out.println(d1.equals(d2)); // } } class Dog { String name; String color; String category; int weight; public Dog(String name ,String color, String category,int weight){ this.name = name; this.color = color; this.category = category; this.weight = weight; }}
输出:false
这时候,你看到老婆在想换了一个小狗就不一样了啦。。 于是你得想个办法,
//添加下面方法可以使上面为true
public boolean equals(Object obj){ //这个equals是你重新定义的 return true; //哪怕上面是只老鼠也把你老婆哄笑了 } }
这个写法是非常随意的,你想这样忽悠你老婆,是不可能的。 严格一点的定义如下:
//添加下面方法可以使判断这两个狗为true public boolean equals(Object obj){ //这个equals是你重新定义的 if(obj == null) return false; //如果为空值,返回false else{ if(obj instanceof Dog){ //instanceof 运算符 Dog d = (Dog)obj; //强制转换成Dog对象 if(d.name==this.name && d.color == this.color && d.category == this.category && d.weight == this.weight){ return true; } } } return false; }
输出:
false
true
源码下载
知识点补充:
equals自定义方法
》Object类中定义有:
》 public boolean equals(Object obj)方法
提供定义对象是否“相等”的逻辑口
》Object的equals 方法定义为:x.equals(y)当x和y是同一个对象的应用
时返回true否则返回false
》 J2SDK提供的一些类,如String. Date等,重写了 Object的equals方法,调用
这些类的equals方法,x.equals (y),当x和y所引用的对象是同一类对象且
属性内容相等时(并不一定是相同对象).返回true否则返回false
》可以根据需要在用户自定义类型中重写equals方法。
相关文章推荐
- 第03章 面向对象 36 Object类之equals方法
- Java源码学习-Object类的hashCode和equals方法
- Java中Object类的equals()和hashCode()方法深入解析
- Java中Object类的equals()和hashCode()方法
- Object类equals和hashCode方法
- object类中的equals和hashcode方法
- 继承中的构造方法,object类,toString类,equals方法
- JAVA笔记7-Object类之toString方法和equals方法
- 解读Object类的equals方法
- Object类和String类equals方法的区别
- 重写object类中的equals方法
- 【Java】Java中的instanceof,Object类,equals()方法,toString()方法
- Object类中equals,hashCode和toString方法的学习
- 关于Object类和String类的equals方法的问题
- 【Java入门第一季】Object类的两个方法toString()和equals()
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)
- 常见对象_常见对象_Object类的equals()方法
- 关于object类的两个重要方法以及为什么重写equals一定要重写hashcode()
- Object类中的equals();hashcode();toString()方法
- Eclipse的使用、Object类及String类的equals方法解析