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
Ở đây tôi thay đổi giá trị của cache[132]
để cache[133]
đó có nghĩa là hiện nay cache[132] == 5
trong printf()
phương pháp nó in 5 tốt nhưng trong println()
lý do tại sao nó in 4 nó sẽ là 5 lý do là những gì đằng sau vào nó?Lý do cho đầu ra khác nhau ở đây là gì?
Bạn đang loay hoay với nội dung không có giấy tờ của một lớp thư viện - tại sao bạn mong đợi hành vi hợp lý ở đây? –
Bạn đang sử dụng sự phản chiếu ở đây vì những gì dường như không có lý do thực sự tốt. Không rõ lý do tại sao bạn muốn làm điều này hoặc những gì bạn đang cố gắng thực hiện. Hơn nữa, khi bạn sử dụng sự phản chiếu, rất nhiều sự bảo đảm của trạng thái đối tượng và bất biến trở nên nhanh chóng vô hiệu, vì vậy hãy cẩn thận. – Makoto
nếu bạn không biết lý do đó là tốt nhưng bạn không thể nói nó "khó chịu" @Oliver Charlesworth –