equals学习笔记

equals在java中很重要,和==区别开。

1.声明格式 public boolean equals(Object obj)

比较规则为:当参数obj引用的对象与当前对象为同一个对象时,返回true,否则返回false.

比如以下两个对象animal1和animal2,引用不同的对象,因此用==或equals()方法比较的结果为false;而animal1和animal3变量引用用一个DOg对象,因此用==或者equals()方法比较的结果为true.

Animal animal1=new Dog();

Animal animal2=new Cat();

Animal animal3=animal1;

则animal1==animal2(False)

animal1.equals(animal2)(false)

animal1==animal3(true)

animal1.equals(animal3)(true)

---------------------------------------------------

而jdk类中有些类覆盖了object类equals()方法,比较规则为:如果两个对象类型一直,并且内容一样,则返回true,这些类有:java.io.file,java.lang.string,包装类(Integer,double等)

比如: Integer int 1=new Integer(1);

Integer int2=new Integer(1);

String str1=new String("helloworld");

String str2=new String("helloworld");

int1=int2 输出:TRUE

str1==str2(false)

str1.equals(str2)(true)

当然,可以自定义覆盖object类的equals()方法,重新定义比较规则,比如,下面Person类的equals()比较规则为:只要两个对象都是Person类,并且他们的属性name都相同,则比较结果为true,否则返回false

public class Person{

private String name;

public Person(String name){

this.name=name;

}

public boolean equals(Object o){

if(this==0)return true;

if(!o instanceof Person)return false;//instanceof一般是用来判断一个不知具体属于哪个类来实例化的时候进行判断的,没有实例化,是起不到任何作用的

final Person other=(Person)o;

if(this.name().equals(other.name()))

return true;

else

return false;

}

注意,在重写equals方法时,要注意满足离散数学上的特性

1.自反性:对任意引用值x, x.equals(x)的返回值一定为true.

2.对称性:对于任何引用值x,y当且仅当y.equals(x)返回值为true时,x.equals(y)的返回值一定为true;

3.传递性:如果x.equals(y)=true, y.equals(z)=true,则x.equals(z)=true

4.一致性:如果参与比较的对象没任何改变,则对象比较的结果也不应该有任何改变

5.非空性:任何非空的引用值x, x,equals(null)的返回值一定为false


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值