情景回放:
定义了一个不变量 Integer TYPE = 1;
使用Mybatis查询出一个整形对象TYPE_1,TYPE_1的值也是1, TYPE == TYPE_1 是返回true的。
当加入redis缓存,从缓存中获取TYPE_1,TYPE_1的值也是1,但是TYPE == TYPE_1返回false。
在说此问题之前,先看下面代码:
new Integer(2) == 2; // true
Integer i = 2;
new Integer(2) == i; // false
new Integer(2) == new Integer(2); // false
Integer j = 2;
i == j; // true
通过上面可以看出,从缓存中反序列化获取的对象TYPE_1是使用new Integer进行创建的,直接从Mybatis获取的对象是直接使用Integer声明的,所以会出现上面情况。
总结:
在以后声明静态常量的时候尽量使用基本类型进行声明。