我有以下代碼:爲什麼在循環中看到一個變量,並且在循環之外沒有看到變量?
String serviceType;
ServiceBrowser tmpBrowser;
for (String playerName: players) {
serviceType = "_" + playerName + "._tcp";
tmpBrowser = BrowsersGenerator.getBrowser(serviceType);
tmpBrowser.browse();
System.out.println(tmpBrowser.getStatus());
}
System.out.println(tmpBrowser.getStatus());
編譯器抱怨的最後一行。它寫道「變量tmpBrowser可能未被初始化」。如果我評論最後一行,編譯不會抱怨。
它不會爲空。它將保持未初始化。這就是爲什麼它不能編譯。 – BalusC 2010-03-18 14:59:11
@BalusC:我不明白你的意見。從wikipedia:在Java中,沒有顯式初始值設定項和數組元素的類和對象的字段會自動使用其類型的默認值進行初始化(布爾值爲false,所有數值類型爲0,所有參考類型爲null)。 Java中的局部變量在被訪問之前必須明確分配給它,否則就是編譯錯誤。 – LB40 2010-03-18 15:02:50
@BalusC當然,代碼並不會真正運行,因此編譯錯誤,但是如果它*運行,tmpBrowser變量的值可能爲空(任何非初始化變量的值),因此編譯器錯誤。 – Peter 2010-03-18 15:02:50