交换两个integer变量的位置;发现没用
![](https://img.haomeiwen.com/i13174261/03154e9b956f679c.png)
private final int value;因为是final private 所以要用反射解决
![](https://img.haomeiwen.com/i13174261/585e35a064b6a752.png)
javap -v App.class
字节码编译:发现调用integer.valueOf;
Integer.valueOf在-128-127 之间有缓存,用的是同一地址值,equals true
大于-128-127 需要new对象 地址值不一样,所以equals为false
![](https://img.haomeiwen.com/i13174261/d1280aceb190028d.png)
当field.set(i1,i2.intValue());的时候 修改了 i1的内存地址,所以temp 也就是2了,所以i1,i2 都是2.
缓存修改的是同一块内存
解决方案: 重新new,不用缓存,得到如下图结果:
![](https://img.haomeiwen.com/i13174261/3ea046d2ffe0c302.png)
网友评论