2017-12-18 167 views
0

這兩行代碼之間是否存在顯着差異?新int [] {}之間的區別或者只是{}

int[] array = new int[]{1,2,3} 
int[] array = {1,2,3} 

如果我不得不猜測,相同的構造函數在第二個版本中隱式調用,使它們相同。

編輯: This question was explored previously here but with default values.我的問題考慮了非默認值的數組的初始化。

+0

你有沒有試過反彙編字節碼,看看有沒有什麼明顯的區別? – Veera

回答

2

只是出於好奇,我也去編譯類以下方法

public void arrayTest1(){ 
    int[] array = new int[]{1,2,3}; 
} 

public void arrayTest2(){ 
    int[] array = {1,2,3}; 
} 

下面是與之相關的結果。

public void arrayTest1(); 
    Code: 
     0: iconst_3 
     1: newarray  int 
     3: dup 
     4: iconst_0 
     5: iconst_1 
     6: iastore 
     7: dup 
     8: iconst_1 
     9: iconst_2 
     10: iastore 
     11: dup 
     12: iconst_2 
     13: iconst_3 
     14: iastore 
     15: astore_1 
     16: return 

    public void arrayTest2(); 
    Code: 
     0: iconst_3 
     1: newarray  int 
     3: dup 
     4: iconst_0 
     5: iconst_1 
     6: iastore 
     7: dup 
     8: iconst_1 
     9: iconst_2 
     10: iastore 
     11: dup 
     12: iconst_2 
     13: iconst_3 
     14: iastore 
     15: astore_1 
     16: return 

這兩個語句本質上看起來是相同的反編譯。

+0

謝謝!這是很好的知道。這是我原來的帖子中的一條評論:「你試過拆開字節碼,看看有沒有什麼明顯的區別?」 - 維拉「。這是你做的嗎?這是如何完成的? – Andrew

+0

[javap](https://docs.oracle.com/javase/7/docs/technotes/tools/windows/javap.html)由Java發行版提供,允許您反彙編字節碼。在這種情況下,我運行了-c選項 – Veera

+0

感謝[Pshemo](https://stackoverflow.com/users/1393766/pshemo)添加更多細分代碼。 – Veera

相關問題