簡體   English   中英

錯誤:變量可能尚未初始化

[英]error: variable might not have been initialized

我找不到我得到的原因:

變量可能尚未初始化

范例1:

class Test {
    public static void main(String[] args) {
        int i = 10;
        int j;
        if (i == 10) {
            j = 20;
        }
        System.out.println(j);
    }
}
 Test.java:11: error: variable j might not have been initialized System.out.println(j); ^ 1 error 

范例2:

class Test {
    public static void main(String[] args) {
        int i = 10;
        int j;
        if (i == 10) {
            j = 20;
        } else {
            j = 30;
        }
        System.out.println(j);
    }
}

輸出:

20

我的疑問是在第二個示例中,如何初始化j

第一種情況,如果i!= 10 j在執行期間不會初始化

System.out.println(j);

在第二個示例中,j將始終具有一個值(i!= 10 j將為30)

System.out.println(j);

注意

**might not** be initialized

代替int j; 您必須具有int j = null;

在第二個示例中,如何初始化j?

j已初始化,因為您提供了所有可能情況的路徑...

  • i等於10if(i == 10) { )行
  • i不等於10 (第} else {行, } else {

無論如何, j都會被初始化。

在您的第一個解決方案中,情況並非如此。 如果i不等於10 ,那么j將不會被初始化,Java不喜歡這樣。 Java不關心i 等於 10在你的邏輯,它只是在乎存在這樣的情況的情況下j可能不被初始化。

對於局部變量,JVM將不提供任何默認值,我們必須在使用該變量之前顯式執行初始化。

示例1中:不能保證在運行時在邏輯塊內初始化局部變量,在您的情況下,只有if語句( 如果它不是true)則初始化將如何發生 ,因為您會遇到此錯誤。

示例2中,您同時使用了if,else語句,因此如果condition為true,則變量j將被初始化,如果condition為false,則j也將被初始化。 (在示例2中,通過if或else將初始化變量j ),因為這樣不會導致任何錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM