首先,要注意 equals 和 = =的区别。业务代码中进行内容的比较,针对基本类型只能使用 = =,针对 Integer、String 在内的引用类型,需要使用 equals。Integer 和 String 的坑在于,使用 = = 判等有时也能获得正确结果。
其次,对于自定义类型,如果类型需要参与判等,那么务必同时实现 equals 和 hashCode 方法,并确保逻辑一致。如果希望快速实现 equals、hashCode 方法,可以借助 IDE 的代码生成功能,或使用 Lombok 来生成。如果类型也要参与比较,那么 compareTo 方法的逻辑同样需要和 equals、hashCode 方法一致。
最后,Lombok 的 @EqualsAndHashCode 注解实现 equals 和 hashCode 的时候,默认使用类型所有非 static、非 transient 的字段,且不考虑父类。如果希望改变这种默认行为,可以使用 @EqualsAndHashCode.Exclude 排除一些字段,并设置 callSuper = true 来让子类的 equals 和 hashCode 调用父类的相应方法。
判等问题
最新推荐文章于 2023-11-12 12:43:00 发布