因为它是一个局部变量。这就是为什么没有分配给它的原因:
局部变量略有不同;编译器永远不会为未初始化的局部变量分配默认值。如果您无法在声明它的地方初始化局部变量,请确保在尝试使用它之前为其分配一个值。访问未初始化的局部变量将导致编译时错误。
编辑:为什么 Java 会引发此编译错误?
如果我们查看IdentifierExpression.java类文件,我们会发现这个块:
...
if (field.isLocal()) {
LocalMember local = (LocalMember)field;
if (local.scopeNumber < ctx.frameNumber && !local.isFinal()) {
env.error(where, "invalid.uplevel", id);
}
if (!vset.testVar(local.number)) {
env.error(where, "var.not.initialized", id);
vset.addVar(local.number);
}
local.readcount++;
}
...
如前所述 ( if (!vset.testVar(local.number)) {),JDK 检查 ( testVar) 是否分配了变量 (Vset的源代码,我们可以在其中找到testVar代码)。var.not.initialized如果不是,它会从属性文件中引发错误:
...
javac.err.var.not.initialized=\
Variable {0} may not have been initialized.
...
来源