您的位置:首页 > 移动开发 > Objective-C

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方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: