为了账号安全,请及时绑定邮箱和手机立即绑定

Java中反射计算2 + 2 = 5

Java中反射计算2 + 2 = 5

30秒到达战场 2018-08-08 14:14:20
代码如下:package basic;import java.lang.reflect.Field;public class TestField {    public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {         @SuppressWarnings("rawtypes")         Class cache = Integer.class.getDeclaredClasses()[0];         Field myCache = cache.getDeclaredField("cache");         myCache.setAccessible(true);         Integer[] newCache = (Integer[]) myCache.get(cache);        newCache[132] = newCache[133];         int a = 2;         int b = a + a;         System.out.printf("%d + %d = %d", a, a, b);     } }运行结果如下:2 + 2 = 5为什么会有这样的输出结果呢?另外附上内部类IntgerCache的源码如下:
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

JavaInteger对-127到128的整形数据是有缓存的,你这里通过反射缓存中的第133号数据(既整数5)赋值给了第132号数据(既整数4),所以4就会变成5来表示。在使用int数据计算时结果是正常的,但是在打印时由于做了装箱,int数据变成了Integer,这时会采用缓存,所以4就会打印出5来。

查看完整回答
反对 回复 2018-09-17
  • 1 回答
  • 0 关注
  • 681 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信