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
यहाँ मैं अब cache[132] == 5
printf()
विधि यह 5 ठीक प्रिंट में लेकिन println()
में क्यों यह प्रिंट 4 यह 5 कारण उस पर पीछे क्या होना चाहिए इसका मतलब है कि cache[133]
को cache[132]
का मूल्य बदल?यहां विभिन्न आउटपुट का कारण क्या है?
देख रहे हैं, आप पुस्तकालय वर्ग के अनियंत्रित आंतरिक के साथ झुका रहे हैं - आप यहां उचित व्यवहार की अपेक्षा क्यों करेंगे? –
आप यहां वास्तविक प्रतिबिंब के लिए प्रतिबिंब का उपयोग कर रहे हैं। यह अस्पष्ट है कि आप ऐसा क्यों करना चाहते हैं या आप क्या करने की कोशिश कर रहे हैं। इसके अलावा, जब आप प्रतिबिंब का उपयोग करते हैं, तो वस्तु स्थिति और अपरिवर्तनीयता की बहुत सारी गारंटी तेजी से शून्य और शून्य हो जाती है, इसलिए सावधानी के साथ चलें। – Makoto
यदि आप अच्छे कारण को नहीं जानते हैं लेकिन आप इसे "fiddling" नहीं कह सकते हैं @ ओलिवर चार्ल्सवर्थ –