反射IntegerCache来动态修改Integer缓存池里的数值
Posted Brrby
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射IntegerCache来动态修改Integer缓存池里的数值相关的知识,希望对你有一定的参考价值。
a==1&&a==2&&a==3 一定是false?
实验证明:通过反射动态修改IntegerCache的[-128, -127] 区间里的256个数字值可以使
a==1&&a==2&&a==3
变为true
@Test
public void t5() throws Exception {
Class clazz=Integer.class.getDeclaredClasses()[0];
Field c = clazz.getDeclaredField("cache");
c.setAccessible(true);
//array就是一个[-128, -127]的数组, array[0]是-128
Integer[] array=(Integer[]) c.get(clazz);
array[130]=array[129];
array[131]=array[129];
Integer a=1;
System.out.println(a==(Integer)1&&a==(Integer)2&&a==(Integer)3);
System.out.println("2的值:"+(Integer)2+"\\n3的值:"+(Integer)3);
}
以上是关于反射IntegerCache来动态修改Integer缓存池里的数值的主要内容,如果未能解决你的问题,请参考以下文章
反射IntegerCache来动态修改Integer缓存池里的数值