java - 在 Java 中处理未初始化的字符串

标签 java object compiler-errors initialization

这是我正在做的一个小程序的一部分,作为家庭作业:

public Exam maxGrade() {
    Node p = firstNode;
    int max = 0;
    String name;
    while (p!=null) {
        if (p.info.getGrade()>max) {
            max = p.info.getGrade();
            name = p.info.getName();
        }
        p = p.next;
    }

    if (name==null)
        return null;
    else
        return searchByName(name);
}

所以当我继续编译时,编译器输出这条消息:

Student.java:127: error: variable name might not have been initialized if (name==null)

将第四行替换为:

String name = null;

现在,我可以看出其中的一些逻辑。但我真的很想了解问题背后的运作方式。 我的意思是,如果编译器发现您在代码中对某个变量进行了一些操作,它会检查该变量是否已初始化,这似乎是合理的,但我不认为我正在做任何需要初始化该变量的事情。

根据 this 等来源当我简单地声明我的字符串(或任何其他对象)变量“name”时,它已经指向 null。那为什么简单地检查那个值是否为空就被认为是异常的呢?除了赋值之外,编译器是否会将我对未初始化变量所做的任何操作视为错误?

最佳答案

对象类型的字段默认初始化为空。数组成员也默认初始化为 null。

局部变量不是——它们必须显式初始化。

这是一件好事。未初始化的变量通常表示错误。

来自 "Initial Values of Variables"在 Java 语言规范的第 4 章中:

A local variable (§14.4, §14.14) must be explicitly given a value before it is used, by either initialization (§14.4) or assignment (§15.26), in a way that can be verified using the rules for definite assignment (§16).

关于java - 在 Java 中处理未初始化的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16628707/

相关文章:

java - 每次程序运行时创建一个新的但不同的对象

javascript - 嵌套的键值对分组到一个数组中

c - 错误: 'for' loop declarations only in c99 mode

java - Swing 的 Unicode 支持的限制

java - 如何在项目中应用Framework?

python - 错误 : _tkinter. TclError:无法调用 "wm"命令:应用程序已被销毁

c# - C#代码可在Visual Studio 2019中使用,但不能在在线编译器中使用

ios - 为什么不声明实例变量?

java - 为什么关闭子框架也会关闭 Java swing 中的主框架..?

java - Android: R.java: 错误 <identifier> 预期