int a = 2;
int b = a + a;
Class cache = Integer.class.getDeclaredClasses()[0];
Field myCache = cache.getDeclaredField("cache");
myCache.setAccessible(true);
Integer[] newCache = (Integer[]) myCache.get(cache);
newCache[132] = newCache[133];
System.out.printf("%d",b); // 5
System.out.println(b); // 4
Şimdi cache[132] == 5
o yazdırır neden 4 o nedeni üzerinde arkasında ne 5 olmalıdır bunun 5 cezası yazdırır printf()
yönteminde ama println()
anlama cache[133]
için cache[132]
değeri değiştirmek?Farklı çıktıların sebebi nedir? İşte
Kütüphane sınıfının belgelenmemiş iç yapısıyla uğraşmak zorunda kalıyorsunuz - neden makul davranışlar beklersiniz? –
Gerçekten iyi bir neden olmadığı anlaşılan, burada yansımayı kullanıyorsunuz. Bunu neden yapmak istediğinizi veya neyi başarmaya çalıştığınız belli değil. Dahası, yansıma kullandığınızda, nesne durumunun ve değişmezlik garantilerinin birçoğu hızla boşa kalır ve bu yüzden dikkatli davranın. – Makoto
eğer bunun nedenini iyi bilmiyorsanız, ancak "fiddling" diyemezsiniz @Oliver Charlesworth –