2017-04-02 119 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