Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save xcaspar/d9782e34391c2c0d7ef1 to your computer and use it in GitHub Desktop.
Save xcaspar/d9782e34391c2c0d7ef1 to your computer and use it in GitHub Desktop.

Integer反序列化后遇到的比较问题

情景回放:
定义了一个不变量 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声明的,所以会出现上面情况。

总结:
在以后声明静态常量的时候尽量使用基本类型进行声明。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment