note
note copied to clipboard
如何实现 2 + 2 = 5 (Java版)
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
直接相加就是本身的计算,2 + 2 = 4。
而printf的计算是通过缓存的array来计算的,2 + 2 = 4,而 4 对应 %d的结果是array[132],而array[132]被替换成了array[133],即5,从而达到改变结果。