简化代码时的Java切换错误

时光行者Z

大家好,这是我的第一篇文章,因此,如果我有任何错误,请原谅我。这是我的问题:

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,我认为它们都是同一回事。有人可以告诉我有什么区别,为什么第一个不起作用?

匿名Co夫

因为编译器不够“智能”。

在您的第一个代码段中,如果onlineplayer其值不同于0或1,maxplayer则将保持未初始化状态。
当然,这实际上是不可能的,因为它onlineplayer是使用值0初始化的,并且没有其他线程可以对其进行修改。但是编译器无法识别这一点。

实际上,这种缺乏“聪明”的想法是根据设计的。Java语言规范具有用于明确赋值的规则,您可以在第16章中阅读。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章