1
我知道,有一個小竅門使用反射和嘗試它的思想來改變Long
使用反射
Field field = Long.class.getField("MIN_VALUE");
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, 2);
System.out.println(Long.MIN_VALUE);
一個static final
字段的值,但上面的代碼甚至不拋出任何異常變化Long.MIN_VALUE它也不會更改Long.MIN_VALUE
的值。爲什麼這樣?
我之前已經注意到類似的行爲。看起來Java緩存了原始(和'String')最終值,所以通過反射改變它們通常是行不通的。 – SamYonnou
(以前的評論附錄)您會發現,如果您通過反思而不是直接訪問該字段,它將保留更改後的值而不是舊值。 – SamYonnou