2017-04-02 264 views
1

最近当我在LeetCode上做一些练习时,我发现了一些技巧性的解决方案。它使用Object o来引用一个数组Object o = new Object[]{null,null};,我想也许这是因为在java中一切都是object.But当我尝试这种方式时,它出错了。 Object o3 = {1,2};所以我想尽办法来初始化数组,我想看到的差异,像这些Java中静态初始化和动态初始化有什么区别?

int arr[] = {1,2}; 
Object o = arr; 
Object o1 = new int[2]; 
Object o2 = new int[]{1,2}; 
Object o3 = {1,2}; 

只有O3将编译error.I不知道是否是因为initialization.I的方式知道当我使用静态初始化它将首先分配内存,当使用动态初始化它不会。它们之间的任何其他差异会导致此错误?当我使用new来创建一个数组。它在jvm中做了什么?在此先感谢。

+2

“in java everything is object”不,原语不是对象 – m0skit0

+0

一个'差异'是在Java中没有'静态初始化'这样的事情。 – EJP

回答

3

初始化程序{1,2}new int[] {1,2}的简写。此简写只能用作int[]类型变量的初始值设定项。 例如,当以下工作:

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++术语。

  那么,它也可能是byte[]类型,long[]的变量, float[]Integer[]等的量,文字12是分配兼容。请参阅Section 10.6 of the Java Language Specification