Open Yhzhtk opened 10 years ago
public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException { Class cache = Integer.class.getDeclaredClasses ()[0]; Field c = cache.getDeclaredField ("cache"); c.setAccessible (true); Integer[] array = (Integer[]) c.get (cache); array[132] = array[133]; System.out.println(2 + 2); System.out.printf("%d",2 + 2); }
原理分析:array[132] = 4, array[133] = 5
array[132] = 4, array[133] = 5
直接相加就是本身的计算,2 + 2 = 4。
而printf的计算是通过缓存的array来计算的,2 + 2 = 4,而 4 对应 %d的结果是array[132],而array[132]被替换成了array[133],即5,从而达到改变结果。
原理分析:
array[132] = 4, array[133] = 5
直接相加就是本身的计算,2 + 2 = 4。
而printf的计算是通过缓存的array来计算的,2 + 2 = 4,而 4 对应 %d的结果是array[132],而array[132]被替换成了array[133],即5,从而达到改变结果。