为什么int变量没有默认值?

时间:2016-09-27 19:30:11

标签: java initialization

在我看来,int变量的默认值是0.但是,在我的演示中,变量num3没有初始值。

class Solution
{
    static int num1;
    int num2;
    public static void main(String[] args){
        int num3;
        int[] nums = new int[5];
        System.out.println("num1: " + num1);
        Solution sol = new Solution();    
        System.out.println("num2: " + sol.num2);
        System.out.println("num3: " + num3);
        System.out.print("nums:");
        for(int item : nums)
            System.out.print(" " + item);
        System.out.println("");
    }
}

我在Ubuntu16.04上运行了我的演示。我得到的错误如下:

Solution.java:12: error: variable num3 might not have been initialized
        System.out.println(num3);
                           ^
1 error

如果我删除此行System.out.println("num3: " + num3);,我的结果如下:

num1: 0
num2: 0
nums: 0 0 0 0 0

如果有人知道原因,请告诉我。感谢。

1 个答案:

答案 0 :(得分:0)

来自https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html(我的重点):

  

默认值

     

声明字段时并不总是需要指定值。   声明但未初始化的字段将设置为a   编译器合理默认。一般来说,这是默认的   将为零或null,具体取决于数据类型。依靠这样的   但是,默认值通常被认为是错误的编程   风格。

     

...

     

局部变量略有不同;编译器永远不会为未初始化的局部变量分配默认值。如果无法初始化声明它的局部变量,请确保在尝试使用它之前为其赋值。访问未初始化的局部变量将导致编译时错误。