我與一個朋友發給我的代碼段相交。它有一個非常奇怪的行爲。我試圖谷歌代碼,看看我是否在互聯網上找到了一些東西,但沒有運氣。我無法聯繫我的朋友,所以我對自己的工作很感興趣。任何人都可以解釋爲什麼這段代碼返回false
public class Test {
public static void main(String[] args) throws MalformedURLException {
System.out.println(Boolean.TRUE); //This prints false
}
static {
try {
Field value = Boolean.class.getDeclaredField("value");
value.setAccessible(true);
value.set(Boolean.TRUE, value.get(Boolean.FALSE));
} catch (Exception e) {
throw new AssertionError(e);
}
}
}
我認爲,這樣的一段代碼它聲明爲靜態的,它會首先運行該main
方法,以及靜態代碼裏面正在改變這一切Boolean
實例的值(?)。我不知道,我需要專家意見來證實這一點。
「靜態」部分是一個靜態初始化塊,該類在第一次加載時執行。此塊使用(討厭)反射片將靜態字段「TRUE」的值更改爲「false」。看看[初始化字段](http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html)瞭解更多詳情 – MadProgrammer