最近当我在LeetCode上做一些练习时,我发现了一些技巧解决方案。它使用Object o来引用数组Uncaught TypeError: Cannot read property 'mData' of undefined
,我想也许是因为在java中一切都是对象。但是当我尝试这种方式时,它出错了。Object o = new Object[]{null,null};
所以我尝试了各种方法来初始化数组,我希望看到差异,比如这些
Object o3 = {1,2};
只有o3会编译错误。我不知道是不是因为初始化的方式。我知道当我使用静态初始化时它会首先分配内存,当使用动态初始化时它不会。它们之间的任何其他差异导致此错误?当我使用new创建数组时。它在jvm中做了什么?提前感谢。
答案 0 :(得分:3)
初始值设定项{1,2}
是new int[] {1,2}
的简写。此简写只能用作int[]
类型变量的初始值设定项。 1 例如,以下内容有效:
int arr[] = {1,2};
这不是:
int arr[];
arr = {1,2}; // ERROR
相反,您需要使用:
int arr[];
arr = new int[] {1,2};
同样,您可以使用:
Object o3 = new int[] {1,2};
P.S。以上内容适用于static
以及实例字段,也适用于局部变量。 Java没有“静态与动态初始化”这样的区别。这是更多的C ++术语。
1 嗯,它也可以是byte[]
,long[]
类型的变量,
float[]
,Integer[]
等,文字1
和2
的分配兼容。请参阅Section 10.6 of the Java Language Specification。