构造函数中写成员变量的数据类型有什么问题?

What is the problem of writing data type of member variable in constructor?

public class Set {
    int[] elements;
    public Set() {
        int[] elements= new int[0];
    }
}

以上代码导致 NullPointerException。

相比之下,下面的代码不会导致 NullpointerExceoption 并且运行良好。

public class Set {
    int[] elements;
    public Set() {
       elements= new int[0];
    }
}

两个代码的唯一区别是是否给出了成员变量类型的int[]。

为什么类型导致异常? 我的猜测是构造函数不会做任何事情。但是我发现它通过构造函数做了一些神秘的事情。那么构造函数在第一段代码中实际上做了什么,为什么会导致异常?

在第一个示例中,int[] elements = new int[0]; 您将局部变量 elements 定义为大小为 0 的数组。

在第二个示例中,您将大小为 0 的数组分配给实例变量元素。