假设我有下面一段代码为什么java编译器不能识别字段已被初始化?
int myVar;
final boolean condition = <someCondition>;
if (condition) {
myVar = 1;
}
if (condition) {
System.out.println("myVar = " + myVar);
}
当我编译此,我得到了预期myVar might not have been initialized
错误。 这是编译器中的错误吗?当condition
为真时很容易看到“myVar”被设置,并且仅在condition
为真时才被引用。 (condition
也永远不会重置)
P.S:对于那些对我的评论需要初始化为0,是的,我意识到这一点。但问题是,我想“myVar的”要最终
@imk这是相当明显的OP已经知道,因为这个问题的整点是关于*为什么*编译器需要初始化。 – azurefrog
Java编译器根本没有做足够深入的分析,得出结论:在使用变量'myVar'之前,一个值总是被分配给变量'myVar'。一般来说,它不会尝试关联不同条件语句中的条件。 –
我不认为编译器意识到这种情况不会改变。举例来说,这是在一个中断的CPU上运行。条件可能会改变,当它回到执行此。 没关系,我没有看条件的声明。 @JohnBollinger看起来足够了。 – bhow