今天学习了java业务开发常见错误100例的判等问题
-
首先是基本数据类型只能用==,包装类型建议用equals,对于String类型,显式的赋值会相等,但是new String用==就是false.
对于Integer,目前[-128,127]是缓存对象,Integer i = 1,实际上是调用了Integer.valueOf(),如果是new Integer()就不是一样的值 -
,默认的equals是判断引用是否相等,手动重写equals方法需要注意的事情:
- 如果这个对象引用相等,直接返回true
- 如果这个对象是空,直接返回false
- 如果这个对象的类型不一致,返回false
- 判断这个对象的属性规则是否一致
-
如果重写了equals,应当也要重写hashCode.因为map集合里面使用的hashCode方法,每个对象都有唯一的hashCode,要与equals逻辑保持一致.
-
如果重写了equals方法,最好也重写下compareTo方法与equals保持一致.
- Collection.searchBinary()就调用了compareTo方法
-
loombook里面@Data已经帮你实现了equals方法,如果不需要某些字段参与比较可以在字段上面加入@EqualsAndHashCode.Exclud的注解进行排除
-
使用阿里巴巴的规约IDEA插件,可以提示你可能出错的代码
网友评论