变量可能尚未初始化错误

2022-08-31 12:26:00

当我尝试编译这个:

public static Rand searchCount (int[] x)
{
    int a ;
    int b ;

    ...

    for (int l= 0; l<x.length; l++)
    {
        if (x[l] == 0)
        a++ ;
        else if (x[l] == 1)
        b++ ;
    }

    ...

}

我收到以下错误:

Rand.java:72: variable a might not have been initialized
                a++ ;
                ^
Rand.java:74: variable b might not have been initialized
                b++ ;
                ^
2 errors

在我看来,我在方法的顶部初始化了它们。哪里出错了?


答案 1

声明了它们,但未初始化它们。初始化它们等于一个值:

int a;        // This is a declaration
a = 0;        // This is an initialization
int b = 1;    // This is a declaration and initialization

您收到错误,因为您尚未初始化变量,但是在循环中递增它们(例如,)。a++for

Java原语具有默认值,但正如一位用户在下面评论的那样

声明为类成员时,其默认值为零。局部变量没有默认值


答案 2

局部变量不获取默认值。它们的初始值是未定义的,并且通过某些方式分配值。必须先初始化局部变量,然后才能使用局部变量。

当您在类级别(作为成员即字段)和方法级别声明变量时,存在很大差异。

如果在类级别声明字段,则它们会根据其类型获得默认值。如果在方法级别或作为块声明变量(意味着{}内的任何代码),请不要获取任何值并保持未定义状态,直到它们以某种方式获得一些起始值,即分配给它们的一些值。