==和equals的区别?

这道题本身很简单,大部分同学能说出区别,但是在面试的时候,如果每一题都有一个分数的话,大部分同学这道题都拿不到高分,如果你只说==比较的是两个对象的地址,equals可以比较地址也可以比较内容的话,只能拿一个及格的分数,那如何说才能提高本题的分数呢?

首先要说清==是运算符,用来比较两个对象是否相等。Equals是Object类的方法,用于比较两个对象是否相等。 这才是他们直接最大的区别吧?如果把这个和上面的都说出来,你的分数会由60变成70.

我们还要说清==和equals什么时候的作用是相同的。在我们使用的类中,如果没有重写equals方法, 那么equals方法和==的作用就是相同的,因为Object类中equals方法的实现原理就是使用==来实现的。

如果需要比较两个对象的内容,我们需要写equals方法。我们可以参考一下String类中重写的equals方法:

·  使用==操作符检查“参数是否为这个对象的引用”;

·  使用instanceof操作符检查“参数是否为正确的类型”;

·  对于类中的关键属性,检查参数传入对象的属性是否与之相匹配;

·  编写完equals方法后,问自己它是否满足对称性、传递性、一致性;

·  不要将equals方法参数中的Object对象替换为其他的类型,在重写时不要忘掉@Override注解。

重写equals方法需要遵守以下约定

自反性(x.equals(x)必须返回true);

对称性(x.equals(y)返回true时,y.equals(x)也必须返回true);

传递性(x.equals(y)和y.equals(z)都返回true时,x.equals(z)也必须返回true);

一致性(当x和y引用的对象信息没有被修改时,多次调用x.equals(y)应该得到同样的返回值);

非空性(对于任何非null值的引用x,x.equals(null)必须返回false)。

然后再举几个jdk中常见的几个重写了equals的类,说这个可以让面试官知道你有读源码的习惯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值