調用硬盤錄像機登錄 SDK 後,Integer.valueOf(0) 返回 9 或 3,正常應為 0。截圖:


Java Integer 內部緩存 -128 ~ 127 的實例(IntegerCache.cache)。某些 Native SDK 或反射代碼可能修改了緩存數組內容,導致 valueOf(0) 返回被篡改的對象。
項目組最終決定在關鍵位置用反射將緩存值改回:
Field cacheField = IntegerCache.class.getDeclaredField("cache");
cacheField.setAccessible(true);
Integer[] cache = (Integer[]) cacheField.get(null);
cache[128] = 0; // index = value + 128
根治需排查第三方 SDK 或禁止反射篡改基礎類緩存。