这是我正在做的一个小程序的一部分,作为家庭作业:
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/