覆盖equals时请遵守通用约定
Object类中非final修饰的方法有equals()、hashCode()、toString()、finalize()、clone()
1、equals()方法不需要被覆盖的情况:
1)实例化的对象只有一个
2)不需要进行逻辑判断,只是单纯的比较内存地址是否相同
3)父类覆盖了equals()方法,并且子类中完全够用
4)类是私有的或者包级私有,equals()方法不会被调用。但是建议重写然后抛AssertionError(断言语句失败)异常
2、equals()方法需要被覆盖的情况:
想要实现逻辑比较。比如实现 相同值的不同对象认为是相等的
3、equals方法通用约定:
1)自反性:自己和自己比较时 返回true
2)对称性:x.equals(y) 和 y.equals(x)必须是相同的
3)传递性:如何x.equals(y) y.equals(z)那么x.equals(z)
4)一致性:如果对象的值没有改变,那么x.equals(y)一直是相同的结果
5)非空性:任何非空对象和null比较都返回false
4、覆盖equals方法的步骤
1)== 判断两个对象的内存地址是否相同。
2)对象instanceof类型 判断传的参数是否属于同一个类型 不是的话 直接返回false
3)将参数转化为实际的类型,因为instanceof已经判断过,所以放心转。
4)判断关键域是否相同。
5、覆盖equals应当注意的问题
1)short、byte、int、long可以用==比较。float和double用Float.equals() Float.compare
2)先比价 容易比较的域
3)覆盖equals总要覆盖hashCode
4)不要过度追求功能
5)重写一定要传参一致 及 boolean equals(Object obj)
覆盖equals时请遵守通用约定的更多相关文章
- 第8条:覆盖equals时请遵守通用约定
		第8条:覆盖equals时请遵守通用约定 引言:尽管Object是一个具体类,但是设计它主要是为了拓展.它所有的非final方法(equals.hashCode.toString.clone和fina ... 
- Item 8 覆盖equals时请遵守通用约定
		在覆盖equals方法的时候,你必须要遵守它的通用约定,不遵守,写出来的方法,会出现逻辑错误.下面是约定的内容: equals方法实现了等价关系: 自反性.对于任何非null的引用值,x.eq ... 
- 第八条:覆盖equals时请遵守通用约定
		==是物理相等 equals是逻辑相等 因为每个类的实例对象本质上都是唯一的 ,利用物理相等(==)是指一个实例只能相等于它自己. 利用逻辑相等是(equals)指 一个实例是否和另一个实例的某些关键 ... 
- 【Effective Java】4、覆盖equals时请遵守通用约定
		package cn.xf.cp.ch02.item8.transitivity; public class Point { private final int x; private final in ... 
- 第10项:重写equals时请遵守通用约定
		重写equals方法看起来似乎很简单,但是有许多重写方式会导致错误,而且后果非常严重.最容易避免这类问题的办法就是不覆盖equals方法,在这种情况下,类的每个实例都只能与它自身相等.如果满足了以 ... 
- 覆盖equals方法时请遵守通用约定
		覆盖equals方法时请遵守通用约定 覆盖equals方法看起来很简单,但是有许多覆盖方式会导致错误,并且后果很严重.最容易避免这种类问题的方法就是不覆盖equals方法,在这种情况下,类的每个实 ... 
- EffectiveJava(8)覆盖equals是要遵守的约定
		覆盖equals是要遵守的约定 1.覆盖种类: -类的每个1实例本质上都是唯一的 -不关心类是否提供了"逻辑相等"的测试功能(Random测试是否能随机相同数字) -超类已经覆盖了 ... 
- 重写equals时,遵守的规定
		0 正确的equals方法 public class MyClass { // 主要属性1 private int primaryAttr1; // 主要属性2 private int prima ... 
- 第8条:覆盖equals时遵守通用约定
		如果不需要覆盖equals方法,那么就无需担心覆盖equals方法导致的错误. 什么时候不需要覆盖equals方法? 1.类的每个实例本质上是唯一的. 例如对于Thread,Object提供的equa ... 
随机推荐
- CAS去掉HTTPS认证
			如何去掉HTTPS认证? 说明:默认情况下HTTP也是可以访问CAS SERVER的,但认证,登陆,退出等操作均没有任何的效果.所以必须作出下面的修改 1.进入WEB-INF\spring-confi ... 
- python随机生成图片
			#-*-coding:utf-8-*- import tensorflow as tf import numpy as np import cv2 image = tf.random_uniform( ... 
- Spring MVC 返回 xml json pdf 数据的配置方法
			<!-- Spring MVC 返回 xml 数据的配置方法 --> <bean class="org.springframework.web.servlet.vi ... 
- 矩阵快速幂2 3*n铺方格
			#include <iostream> #include <cstdlib> #include <cstring> #include <queue> # ... 
- cookie中转注入
			用这个源码搭建网站找注入点http://192.168.226.129/shownews.asp?id=235 判断注入点,在后面加上'http://192.168.226.129/shownews. ... 
- 关于python的列表操作(一):取值,增加,修改,删除
			# 列表操作 name_list = ["wang", "niu", "bai", "sui"] # 取值 print( ... 
- Django模型中的OneToOneField和ForeignKey有什么区别?
			说是ForeignKey是one-to-many的,并举了一个车的例子: 有两个配件表,一个是车轮表,另一个是引擎表.两个表都有一个car字段,表示该配件对应的车. 对于车轮来说,多个对应一个car的 ... 
- Merge array and hash in ruby if key appears in array
			I have two arrays one = [1,2,3,4,5,6,7] and two = [{1=>'10'},{3=>'22'},{7=>'40'}] Two will ... 
- 关于mapreduce 开发环境部署和jar包拷贝问题
			1.mapreduce开发应当在linux里面的eclipse不然容易出现问题. 2.把eclipse拷贝到linux环境中,然后需要拷贝hadoop-eclipse-plugin-2.3.0.jar ... 
- Luogu P2864 [USACO06JAN]树林The Grove(bfs)
			P2864 [USACO06JAN]树林The Grove(bfs) 题面 题目描述 The pasture contains a small, contiguous grove of trees t ... 
