某个ORM 实体类ClaasA含有域 Integer id.
比较两个类的该id是否相等,要用equals,而不能用==.
因为Integer的 == 比较,在-128~127之间,由于存在cache静态数据(具体可参见Integer的JDK实现源码,或Effective Java书中介绍),故会相等。
但如果不在该范围内比较,会不相等。
如果项目实现中出现了这种灵异现象,一会逻辑符合,一会逻辑不符合或者测试环境符合,线上出问题,没准就是这种 相等的坑。
一句话小结,==比较的是地址,equals比较的是内容。