pel*_*ele 3 java variables compiler-errors initialization variable-assignment
int a = 1, b;
if(a > 0) b = 1;
if(a <= 0) b = 2;
System.out.println(b);
Run Code Online (Sandbox Code Playgroud)
如果我运行这个,我收到:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: The local variable b may not have been initialized at Broom.main(Broom.java:9)
我知道局部变量没有初始化,你有责任这样做,但在这种情况下,第一个if不初始化变量?
pol*_*nts 14
如果更改第二if
到else
,那么编译器会很高兴.
int a = 1, b;
if(a > 0) b = 1;
else b = 2;
System.out.println(b);
Run Code Online (Sandbox Code Playgroud)
如果你真的想深入研究这个问题,Java语言规范的一整章专门讨论定义赋值问题.这种情况与您的具体示例有关:
规则不接受变化:
Run Code Online (Sandbox Code Playgroud)void flow(boolean flag) { int k; if (flag) k = 3; if (!flag) k = 4; System.out.println(k); // k is not "definitely assigned" before here }
因此编译此程序必然会导致编译时错误.
这个特殊的例子(以及许多其他说明性的例子)可能似乎违背了你的期望,但这正是语言设计者想要的方式,所有编译器都必须遵守规则.
专注于"IF",编译器无法判断条件是否为真.
归档时间: |
|
查看次数: |
2000 次 |
最近记录: |