王磊的个人技术记录 王磊的个人技术记录

记录精彩的程序人生

目录
Integer缓存
/  

Integer缓存

最近遇到一个奇怪的bug,往map中put一个3 在get出来变成了-2。最后发现是因为同事其它模块的代码修改了Integer的缓存对象导致的。

Integer-128到127的对象。

Map中是只能放对象的,如果放一个int类型,jvm会默认装箱,调用Integer的valueOf方法返回Integer对象。因为放的是3所以会从缓存中取对象返回。

同事的代码是声明了一个Integer对象等于3,然后通过反射强行将对象的值改成了-2,所以导致了这个问题

示例代码如下:

Integer test=  3;
Field b = Integer.class.getDeclaredField("value");
b.setAccessible(true);
b.set(test, --test);
 System.out.println(Integer.valueOf(3));
打印出来是2


标题:Integer缓存
作者:wanglei03
地址:https://wangleijava.com/articles/2021/06/15/1623751354943.html