[英]Can't set a variable inside a while loop
Java的新手,很抱歉,如果這是一個愚蠢的問題。 我想從一個while
循環中為幾個變量分配新值,但這不起作用。 嘗試編譯時出現錯誤“本地變量newString
可能尚未初始化”。 這是一個例子:
public class Test {
public static String example() {
String first;
String second;
String newString;
int start = 1;
while (start<5) {
if (start<4) {
first = "hello";
second = "world";
newString = first + second;
}
start += 1;
}
return newString;
}
public static void main(String[] args) {
System.out.println(example());
}
}
之所以出現此錯誤,是因為編譯器在返回newString
之前不知道newString
是否會初始化。
盡管您知道start<5
和start<4
都是true
並且可以執行,但是編譯器在編譯期間不會執行這些類型的計算。 因此,就其所知,這些語句將永遠不會執行,因此newString
可能會在初始化之前得到返回。
因此,在聲明它時應該初始化它(例如,將其初始化為null
),以避免發生此錯誤。
Java中有一個規則,即必須先初始化所有局部變量,然后才能對其進行初始化。 您正在使用newString
作為返回值,這是一個讀取操作。
盡管您正在為newString
分配一個值,但它是在條件情況下( start<5 && start<4
)完成的。 在編譯時,編譯器不知道運行代碼的結果,因此保守地抱怨這種情況。
簡單的解決方案是初始化字符串:
String newString = "";
當您從方法返回結果變量時,編譯器需要確保將值分配給該變量(在您的情況下為newString
)。
盡管您很清楚條件start < 4
在某些時候是true
,但是編譯器不夠智能,無法弄清楚這一點,這意味着您只需要返回肯定具有值的變量。
根據您的方法的目的,您有以下機會:
String newString = "";
在這種情況下,您可以確保您的方法永遠不會返回null
,這在某些情況下可能難以發現錯誤。
另一個機會是
String newString = null;
如果要允許您的方法返回null
值。
很明顯,在這種情況下,您最終將輸入if
-block並在其他情況下為變量newString
賦值,這種情況並不那么明顯,因此需要確定是否允許您的方法返回null
值。 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.