Closed oweson closed 4 years ago
直接运行上面的代码当然不会出问题,关键在于在完整实现中,通过反射调用Integer#IntegerCache 对cache 中的数据进行了随机篡改,最后才导致读取cache 中的值不符合未修改cache 时的预期
在jdk 8 版本上,编译和运行都不会告警,但在高版本的jdk 上在编译阶段就会警告,比如在jdk 13 上就会警告说对IntegerCache 的反射不合法,在未来此api 可能会被删除
@oweson
如 @cmonkey 所言,这是个谜题,
要你写出解法(即,关键在于在完整实现中,通过反射调用Integer#IntegerCache
对cache
中的数据进行了随机篡改,最后才导致读取cache 中的值不符合未修改cache 时的预期),
让上面的代码运行成 随机的。
这条其实是一个迷题,先不要看解答。看看你能不能自己找出解法。
运行下面的代码:
…… 然后要得到类似下面的输出(每次输出是随机结果):
Output: