==和equals的区别
首先“==”是运算符,比较的是两个对象的地址,equals是Object类的方法,可以比较地址也可以比较内容。
作用:在使用类中,如果没有重写equals方法,那么equals方法和==的作用就是相同的,因为Object类中的equals方法的实现原理就是使用==来实现的。如果需要比较两个对象的内容,就需要写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)