大家好,这是我的第一篇文章,因此,如果我有任何错误,请原谅我。这是我的问题:
public class Main {
public static void main(String[] args) {
int onlineplayer = 0;
int maxplayer;
switch(onlineplayer) {
case 0:
maxplayer = 1;
break;
case 1:
maxplayer = 2;
break;
}
System.out.print(onlineplayer + "/" + maxplayer);
}
这行代码返回此错误:
Main.java:13: error: variable maxplayer might not have been initialized
System.out.print(onlineplayer + "/" + maxplayer);
^
尽管
public class Main {
public static void main(String[] args) {
int onlineplayer = 0;
int maxplayer;
switch(onlineplayer) {
case 0:
maxplayer = 1;
System.out.print(onlineplayer + "/" + maxplayer);
break;
case 1:
maxplayer = 2;
System.out.print(onlineplayer + "/" + maxplayer);
break;
}
}
这个作品。我刚才说过学习Java,我认为它们都是同一回事。有人可以告诉我有什么区别,为什么第一个不起作用?
因为编译器不够“智能”。
在您的第一个代码段中,如果onlineplayer
其值不同于0或1,maxplayer
则将保持未初始化状态。
当然,这实际上是不可能的,因为它onlineplayer
是使用值0初始化的,并且没有其他线程可以对其进行修改。但是编译器无法识别这一点。
实际上,这种缺乏“聪明”的想法是根据设计的。Java语言规范具有用于明确赋值的规则,您可以在第16章中阅读。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句