关于equals和“==”的详解

首先,equals,equals最常用的是在String下调用,用来比较两个字符串是否相同。但实际上equals是Object中的方法,String对其进行了覆写。Object中的equals方法是用来比较两个对象相等的,但是其默认的是按地址进行比较,并不能对内容进行比较。String覆写了此方法用来对内容进行比较。所以原来的equals与“==”可以说是在一定程度上是相同的。还有一点,在String中的equals方法比较的字符串,是大小写敏感的,即大小写相同的且内容一致的才会被equals判断换为相同,否则不相同。

关于“==”,当我们使用==来比较基本数据类型时,比较的是其值,只要他们的值相同,==就可以返回true。当用==比较引用类型时,比较的是的地址,二者是否引用同一个堆内存空间,如果是,则返回true。即便二引用变量引用的堆内存中的内容完全相同,只要是不同的两个堆内存,也只会返回false。

如果我们自定义了某个类,且此类需要进行对像是否相同的比较,那我们需要覆写equals方法,而不能直接调用Object的equals方法。

覆写equals判断对象是否相同需要注意以下几点:

1.equals的参数类型应该为Object,Object可以接收一切类型的对象;

2.接受之可以先通过==进行判断,看二对象应用的地址是否相同,相同则直接返回true;

3.在以上不成立的情况下进行进一步判断。通过instanceof判断此对象是否是此类的实例。同一个类的实例才可以进行比较,不同类的实例自然不会相同。

4.最后对两对象的每个属性的值进行比较,相同则两对象相同,不同则两对象不同。

现按以上思路覆写equals方法,代码如下:

class Person { private String name; private int age; public Person(String name,int age){ this.name=name; this.age=age; } public boolean equals(Object obj){ if(this==obj){ //通过“=="判断二者引用的地址是否相等 return true; } if(!(obj instanceof Person)){ //判断传递进来的对象是否是当前类的实例 return false; } Person per = (Person)obj; if(this.name.equals(per.name)&&(this.age==per.age)) //判断换二者的属性值是否相等 { return true; }else{ return false; } } } public class EqualsDemo { public static void main(String args[]){ Person per1 = new Person("XY",23); Person per2 = new Person("XY",23); Person per3 = new Person("LY",20); System.out.println(per1.equals(per2)?"是同一个人":"不是同一个人"); System.out.println(per1.equals(per3)?"是同一个人":"不是同一个人"); System.out.println(per1.equals("xy")?"是同一个人":"不是同一个人"); } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值