反射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缓存池里的数值

反射IntegerCache来动态修改Integer缓存池里的数值

java 反射和泛型-反射来获取泛型信息

通过反射动态修改 IEnumerable 属性

代理反射注解hook

Java的反射