我應該返回一個字符的方法:方法,返回CHAR返回0
public char Connect(parameters){
for (char c : something){
if (condition){
return c;
}
}
由於我沒有在循環後返回,Netbeans的在添加了
return 0;
方法結束。爲什麼?爲什麼它不是一個錯誤?
我應該返回一個字符的方法:方法,返回CHAR返回0
public char Connect(parameters){
for (char c : something){
if (condition){
return c;
}
}
由於我沒有在循環後返回,Netbeans的在添加了
return 0;
方法結束。爲什麼?爲什麼它不是一個錯誤?
默認值char
類型爲'\u0000'
,其十進制等效值爲0
。見JLS §4.12.5。因此,如果for
循環中的條件永遠不會滿足,則該方法將返回默認值。
爲什麼它不是錯誤?
它不應該是一個錯誤。隱含narrowing conversion這裏從int
到char
類型。
這是因爲控制流可能沒有達到if塊。如果發生這種情況,您的代碼不會指定要返回的內容。這就是爲什麼Netbeans爲你添加return 0
。
讓我們假設表達condition
從來都不是真的,那麼
public char Connect(parameters){
for (char c : something){
if (condition){
return c;
}
}
該方案將完成循環,達到方法的結束,但仍然不會有什麼回報。因此,您可以將return 0
視爲「默認」返回語句。
想象一下,你的狀況永遠不會滿足。在這種情況下,如果您沒有return
聲明,應該返回什麼?
您的情況下的return 0;
是條件未滿足時的默認值。
由於我沒有在循環後返回,Netbeans的加入
返回0;
在方法結束時。爲什麼?爲什麼它不是一個錯誤?
聲明具有return
類型的方法無法正常結束。它必須return
一個值通過任何明確的條件。如果您的for
循環條件爲false
(無法在編譯時評估),我們不能指望它從循環體返回。
這就是netbean爲你設置的原因:0
是char
的默認值和char
返回類型的方法的有效返回值。
Netbeans(可能)將其添加爲默認返回值。如果你有Netbeans自動生成方法,這很有可能。
這不是錯誤,因爲0可以正確轉換爲字符。請參閱asciitable。com,你會發現字符0是一個有效的字符(NUL)。
char是一個數字 – Cruncher