交换两个integer变量的位置;发现没用

private final int value;因为是final private 所以要用反射解决

javap -v App.class
字节码编译:发现调用integer.valueOf;
Integer.valueOf在-128-127 之间有缓存,用的是同一地址值,equals true
大于-128-127 需要new对象 地址值不一样,所以equals为false

当field.set(i1,i2.intValue());的时候 修改了 i1的内存地址,所以temp 也就是2了,所以i1,i2 都是2.
缓存修改的是同一块内存
解决方案: 重新new,不用缓存,得到如下图结果:

网友评论