Java 为什么我不能声明一个数组,然后以这种方式赋值?

Java 为什么我不能声明一个数组,然后以这种方式赋值?,java,arrays,Java,Arrays,为什么当我尝试这样初始化数组时,它会给我一个错误 package practicejava; class Test { public static void main(String[] args) { int[] array; array ={}; } } 为什么以下代码显示错误?更改如下: int[] array; array = new int[]{}; 您当前分配数组的方式无效。您必须在数组中声明数组大小,如下所示 arra

为什么当我尝试这样初始化数组时,它会给我一个错误

package practicejava;

class Test {

    public static void main(String[] args) {

        int[] array;
        array ={};

    }
}
为什么以下代码显示错误?

更改如下:

int[] array;
array = new int[]{};

您当前分配数组的方式无效。

您必须在数组中声明数组大小,如下所示

   array  = new int[5];

数组需要在以下代码行中声明:-

int[]数组=新的int[]{…}

代码的第一行是:-

int[]数组={…}

这一行是Java允许的,只是上述声明的简写符号。请注意,只有当数组的声明和初始化同时完成时,才允许这样做。数组的分配在内部处理,并根据元素的数量进行分配

线路 int[]数组; 只是在堆栈中创建一个空引用,即它不指向任何东西

但是,当您执行array={…}时,它不再有效,因为需要在初始化之前分配内存。Java不会在内部处理此类初始化。 因此,建议进行初始化 数组=新int[]{…}
相反。

以这种方式声明和分配数组必须在同一语句中进行。简言之,因为语言设计者不允许这种形式的初始化。@PeterLawrey相反,因为他们允许在初始化时使用特殊语法,而赋值右侧的内容甚至不是有效的表达式。出现这种不一致是因为它们允许的内容太多,而不是因为它们不允许某些内容。或array=new int[0];虽然这是真的,但问题不在于如何消除错误,而在于我们为什么要得到它。@Pshemo我说过它是无效的。但为什么它是无效的呢?为什么int[]数组={1,2,3};在int[]数组中工作良好;数组={1,2,3}不存在吗?这里使用了什么逻辑?编译器允许array=newint[]{1,2,3}具有显式数组类型,但它也应该知道数组变量的类型,因此它应该能够推断int[]部分,并在{1,2,3}之前添加新int[],这将导致新的[]{1,2,3}编译良好。是的,这对于所有等于0的5的值都非常有效;