-2

我正在尝试执行以下代码:

public class HelloWorld{
     public static void main(String []args){
         int a=10,b=3,m;
         System.out.println("Hello World "+a+" " + b);
     }
}

我期待一个编译错误,因为没有初始化局部变量'm',但程序成功运行并给了我输出。

为什么会这样?我一直在想,如果局部变量没有初始化,编译器会报错。

当我尝试编译下面给出的代码时

public class HelloWorld{
     public static void main(String []args){
         int a=10,b=3,m;
         System.out.println("Hello World "+a+" " + b + " " +m);
     }
}

在这里,我使用了“m”的值,但由于未初始化局部变量而出现错误。

但是为什么 Java 在第一种情况下不显示错误呢?

4

2 回答 2

2

就 Java 编译器而言,未初始化的局部变量是可以的。只要您不尝试使用它们的价值,就是这样。只有您的 IDE 应该警告您m未使用。我的 Eclipse 显示“未使用局部变量 m 的值”。这只是一个警告,不会阻止您的程序运行。

当您尝试使用(undefined) 值时,如在您的第二个片段中,将报告错误。

考虑这个片段。我正在重用你的两条线,并增加了两条。

        int a=10,b=3,m;
        System.out.println("Hello World "+a+" " + b);
        m = 14;
        System.out.println(m);

它也运行良好。我包含它是为了说明当编译器读取您的两行时,它不会检查是否m稍后初始化,因此到目前为止没有发现反对的理由。(顺便说一句,更好的代码风格是m仅在初始化时声明,并且在单独的行上声明每个变量。)

PS无论您m是单独声明还是与编译器一起声明a并且b与编译器无关,这纯粹是一个文体问题。

于 2019-05-19T05:40:46.707 回答
1

使用未初始化的局部变量会出现编译器错误。只有这样,变量才需要具有定义的值。

于 2019-05-19T03:45:31.100 回答